2009-08-11 4 views

答えて

3
public IEnumerable<Employee> ListWithTypeOfWork(IList<Employee> Employees, Guid typeOfWorkId) 
{  
    return from emp in Employees 
     where emp.TypeOfWorks.Any(x => x != null && x.Id == typeOfWorkId) 
     select emp;   
} 
+0

ありがとうございました。私の質問との一致100%はこれにwhere句を修正することができます:emp.TypeOfWorks.FirstOrDefault(x => x!= null && x.TypeOfWork.Id == guid)!= null –

+0

ちょうど情報のために、私はなぜlambda式で誰もが答えるLinqコードに質問してください、具体的な理由はありますか? –

+0

@ Kris-l:FirstOrDefault(Func <>)とAny(Func <>)は全く同じメソッド呼び出しで、Reflectorをチェックインできます。唯一の違いは、FirstOrDefault(Func <>)がオブジェクトを返し、Any(Func <>)が単にboolを返すことです。参照型のリストをテストしているときは、ブールを返すほうがやや効率的です。あなたが値の型のリストをテストしているなら、それは必ずしも問題ではありませんが、おそらくブールを返すのはもう少し効率的です。 –

6

考える次

var res = Employees 
    .Where(x => x.TypeOfWorks.Any(w => w.Id == guid)) 
+0

なぜ 'Where'を' Any'で置き換えて短縮することができますか? :) –

+0

@ライアン、よろしくお願いします。私は述語を受け入れるAnyのオーバーロードがあることを忘れています。 – JaredPar

+0

これらのTypeOfWorksの1つが、コードがスローして例外を発生させるnullの場合。 –

関連する問題