0

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自体への変換を処理したいと考えています。

基本的に、オブジェクト初期化子を使用する必要があります。そうしないと、そのフィールドで一致することができません。

4

1 に答える 1

1

これが実際に私以外の誰かに役立つかどうかはわかりませんが、私の全体的な問題は、特定の時点以降 (リポジトリの外) で IQuerable を使用してはならないことです。

queryable-can-kill-your-dog-steal-your-wife-kill-your-will-to-live-etc

于 2010-09-20T20:58:04.790 に答える