2009-06-30 12 views
1

私はLINQとのトラブルをしました、私は一例に説明します:エンティティへのLINQ含まれています()およびネストされたクエリ

私は、姓と名の列を得た従業員と呼ばれるデータベーステーブルを持って、 とする方法を引数として名前リストリストを取得し、検索の従業員は、このリスト内の要素は、この1「フレッドバーン」、またはthis1「死神」のようにフォーマットされた名前である、 はすでに

//just all employees 
var allData = from emp in Context.Employee select emp; 

var test1 = from emp in allData 
      where(emp.FirstName + " " + emp.LastName).Contains 
      ("" + ((from n in nameList select n).FirstOrDefault())) 
      select emp; 

var test2 = (from emp in allData 
      where (emp.FirstName + " " + emp.LastName) 
      == ((from n in nameList select n).FirstOrDefault()) 
      select emp); 

var test3 = from emp in allData 
      where (from n in nameList select n).Contains 
      (emp.FirstName + " " + emp.LastName) 
      select emp; 

[=運で、これらのアプローチをしようと試み最初のクエリと2番目のクエリは次のようになります。{'' Closure type 'の定数値を作成できません。プリミティブ型(' sucこのコンテキストでサポートされています。 "}例外

および第3:{" LINQ to Entitiesはメソッドを認識しません 'ブール値には[String](System.Collections.Generic.IEnumerable`1 [可能System.String]、可能System.String)」メソッド、およびこの方法では、店舗の表現に変換することができません。 "}

はあなたの提案を聞いて喜んでいるだろう:)

はありがとうございました!



p.s.
確かに、名前をリストに分割して別々に比較することは可能ですが、なぜこれらのクエリは機能しないのでしょうか?

答えて

2

このケースではnameListはメモリコレクション内にあり、Entity Framework内でSQL "IN"句を作成するLINQ to SQLトリックを使用しようとしていると仮定します。残念ながら、EFはこの構文をサポートしていません(まだ)。照合しようとしているレコードの数に応じて、希望する各子供に対して個別の照会を実行することができます。代わりに、連結を使用してentitySQLクエリを作成し、nameListの複数の項目をWHERE操作の別々のOR句として追加することもできます。

関連する問題