2011-01-06 21 views
1

以下のクエリでは、複数の条件を満たす人を返したいと思います。条件の一部は、返される人を含むテーブルのフィールドに適用されます。もう1つの条件は、PersonIdを介してメインテーブル(People)にリンクされた別のテーブル(EmailAddresses)に適用されます。LINQクエリで複数のテーブルから条件を設定するにはどうすればよいですか?

var t = People.Where(x => 
      x.Type == 102 && 
      x.FirstName == "Bob" && 
      x.LastName == "Williams" && 
       x.EmailAddresses.Where (ea=> ea.EmailAddress 
               == "[email protected]") 
      ) 
      .Select(x => x.PersonId) 

どうすればよいですか?

答えて

2

この権利を理解しているか、少なくとも1人はそのアドレスを持っているはずですか? IQueryable<T>の要素の少なくとも1つの述語を満たしている場合はtrue

var t = People.Where(x => 
      x.Type == 102 && 
      x.FirstName == "Bob" && 
      x.LastName == "Williams" && 
       x.EmailAddresses.Any(ea=> ea.EmailAddress 
               == "[email protected]") 
      ) 
      .Select(x => x.PersonId) 

Anyリターン:はい場合は、Anyメソッドを使用します。

+0

正しい、あなたが参加してそれを行うことができると思います。返される人は、4つの条件すべてに一致する必要があります。 – DenaliHardtail

+0

うん、それは私が持っているものです。問題は、「EmailAdresses」プロパティで一致させる必要があることです。ちょうど1つのメールアドレス、そうですか?はいの場合、これは動作します。 – Femaref

+0

申し訳ありません、はい、ただ1つの電子メールアドレスがあるはずです – DenaliHardtail

0

私はこのような何か...

var t = from p in People 
     join e in EmailAddress on p.PersonId equals e.PersonId into pe 
     from a in pe.DefaultIfEmpty 
     where p.Type == 102 && 
      p.FirstName == "Bob" && 
      p.LastName == "Williams" && 
      a.EmailAddress == "[email protected]" 
     select p.PersonId 
関連する問題