POCO でラップしている LINQ dbml クラスがあります。DBML クラスと init を取るオーバーロードされたコンストラクターを作成しました。渡された dbml オブジェクトに基づくラッパー オブジェクトのプロパティ。
例えば
public class MyPerson{
public MyPerson(DBMLPerson p)
{
this.ID = p.ID;
this.Name = p.Name;
}
}
次に、IQueryableを返すこのようなことをすると
{
return from p in datacontext.DBMLPerson
select new MyPerson(p){};
}
その Iquearble でさらにクエリを実行しようとすると、「System.NotSupportedException: The member 'MyPerson.ID' has no supported translation to SQL..」 が表示されます。
ただし、これを行うと{
return from p in datacontext.DBMLPerson
select new MyPerson(){
ID = p.ID;
Name = p.Name;
};
}
エラーはまったく発生せず、すべてが完璧に機能します。基本的に、クラスでLINQオブジェクトからPOCO自体への変換を処理したいと考えています。
基本的に、オブジェクト初期化子を使用する必要があります。そうしないと、そのフィールドで一致することができません。