2016-10-12 6 views
0

これは簡単ですが、Linqの関連するテーブルをSQLにフィルタリングする正しい方法は何でしょうか。 新しい結合で明示的にセカンダリテーブルをインポートすると機能しますが、関連するテーブルのフィルタリングも正しく機能するはずです。例えばLinqラムダ式のSystem.Collections.Generic.IEnumerableをboolに変換できません

var q = from p in db.Personnel 
     where p.PersonnelGifts.Where(p => p.GiftValue >= 2477) 
     select {...} 

私は

が暗黙のうちに 'ブール'

+4

'p.Gifts.Where(p => p.GiftValue> = 2477).Any()'? –

+3

また、 'どこでp.Gifts.Any(p => p.GiftValue> = 2477)' –

答えて

2
var q = from p in db.Personnel 
    where p.PersonnelGifts.Where(p => p.GiftValue >= 2477).Any() 
    select {...} 
に型 'System.Collections.Generic.IEnumerable' を変換できませんというエラーが出ます

または@Jon Skeetとして指摘 - .Any()も述語を受け入れるので、wriできますそれは好きです

var q = from p in db.Personnel 
    where p.PersonnelGifts.Any(p => p.GiftValue >= 2477) 
    select {...} 

なぜあなたのコードがうまくいかなかったのですか? .Where()IEnumerable(またはそれにつきはIQueryable)を返すので、パラメータとしてIEnumerableを受け入れる別のLINQメソッドと連鎖させることができます。 where句はboolの値を想定しており、正確にはこのタイプは.Any()メソッドによって返されます。

関連する問題