2017-04-13 9 views
0

ラムダ選択文の中に関数を追加することはできますか? これは完全に間違った構文ですが、デモンストレーションの目的です。C#EFラムダ関数で選択する

var test = _context.SomeDatabaseTable 
      .Select(c => new SomeViewModel 
      { 
       AssignedUsers = { 
        foreach (var item in c.AssignedToUserIDs.Split(';').ToList()) { 

         //SOME CODE 

        } 
       } 
      }); 

後で結果をループする必要があるかどうかは誰でも知っていますか?

+0

なぜか外に出る – Sajeetharan

+1

私が知る限り、コードは有効なSQLに変換できないので、これはEFでは不可能です。 – HimBromBeere

+0

結果を返すことができます.Foreach(r => doSomething); –

答えて

2

Select()クエリが実際にデータベースに対してクエリを実行しないため、EntityFrameworkはそのC#コードをSQLに変換しようとします。これは明らかにできません。

Select()を呼び出す前にToList()を呼び出してクエリを実行できます。

var test = _context.SomeDatabaseTable 
        .ToList() 
        .Select(c => new SomeViewModel 
        { 
         AssignedUsers = c.AssignedToUserIDs.Split(';') 
        }); 

あなたがToList()を実行する前に適切にクエリをフィルタ処理していない場合、これは、しかし、独自の問題を持っているあなたのDBのサイズが大きくなるにつれて、あなたは悪くなるパフォーマンスの問題に出くわす開始します。

foreachループで試行しているものも無効です。それはコンパイルするべきではなく、私が上に示したものを使用して、AssignedUsersプロパティが 'List'型であると仮定しました。分割された個々の要素を変更したい場合、別のSelect()メソッドを末尾がSplit()

関連する問題