2011-01-06 4 views
1

In der Abfrage unten möchte ich Personen zurückgeben, die mehrere Bedingungen erfüllen. Einige der Bedingungen gelten für Felder in der Tabelle mit den zurückzugebenden Personen. Die andere Bedingung wird auf eine andere Tabelle (EmailAddresses) angewendet, die über PersonId mit der Haupttabelle (People) verbunden ist.Wie setze ich Bedingungen aus mehreren Tabellen in meiner LINQ-Abfrage?

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) 

Wie mache ich das?

Antwort

2

Verstehen Sie dieses Recht, mindestens einer von ihnen sollte diese Adresse haben? Wenn ja, verwenden Sie die Any Methode:

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 gibt true zurück, wenn mindestens eines der Elemente des IQueryable<T> das Prädikat erfüllt.

+0

Richtig. Die Person, die ich zurückgeben möchte, muss alle vier Bedingungen erfüllen. – DenaliHardtail

+0

Ja, das habe ich bekommen. Die Frage war - was muss in der Eigenschaft "EmailAddresses" übereinstimmen? Nur eine E-Mail-Adresse, oder? Wenn ja, wird das funktionieren. – Femaref

+0

Entschuldigung, ja es sollte nur eine E-Mail-Adresse sein – DenaliHardtail

0

ich glaube, Sie es mit einem Join tun könnte, so etwas wie dieses ...

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 
Verwandte Themen