0

リストを使用するビジネス オブジェクトにクエリを射影するクエリを実行しています。問題は、Linq to entities が「LINQ to Entities ではパラメーターなしのコンストラクターとイニシャライザーのみがサポートされている」と不平を言っていることです。

私はこれで髪を伸ばしてきました。私のクエリは次のようになります。

var q = from d in db.Items select new BusinessObject 
  {
      MyList = new List<MyObject>(d.Select(x => new MyObject {// set fields})
  }

初期化子は、それらのコレクションではなく、単一のアイテムのみを受け入れるように見えるため、使用できません。.ToList() を実行できません。これは、EF が MyObject のリストが何であるかを認識していないと不平を言うためです (どうやら、それを SQL に変換しようとしているようです)。

親テーブルの各行に新しいリストが必要なため、クエリの外でリストを作成できません。

ここに何か提案はありますか?

4

1 に答える 1

0

クエリは私には奇妙に見えます-dbとは何ですか?それはあなたのコンテキストまたはあなたのコンテキストのIQueryableプロパティであると想定されていますか?

コンテキストを想定すると、BusinessObjectコレクションをクエリするときにitemsプロパティ(これは何のコレクションですか?)を積極的に読み込み、リストに変換してから、itemsプロパティをメモリ内コレクションのリストに投影することができます。 :

var q = db.BusinessObjectsContextProperty.Select(d => d.items)  //eager load the items property
   .ToList() // get it into memory
   .Select(d => new BusinessObject { MyList = d.items
      .Select(item => new MyObject { ... } ) // project the in-memory list
   ); 
于 2012-04-10T21:54:42.433 に答える