2013-03-27 2 views
5

Ich habe diese Tabellenstruktur: Two tables and a lookup tableWie wird in der LINQ-Abfrage mithilfe von .Include() durch die enthaltene Tabellenspalte sortiert?

Ich habe diese Abfrage LINQ:

var query = (from p in context.People.Include("PeopleClub").Include("PeopleClub.Club") 
      orderby p.Name 
      select p).ToList(); 

Ist es möglich, so etwas zu tun:

var query = (from p in context.People 
           .Include("PeopleClub") 
           .Include("PeopleClub.Club") 
      orderby p.Name, p.PeopleClub.DisplaySequence 
      select p).ToList(); 

Update: Mit Entity Framework 4.0

Update 2: Ich gebe auf. Für einen anderen Ansatz siehe this similar question. Ich habe meine Abfrage ohne die .Include() neu geschrieben.

+0

Haben Sie versucht? Funktioniert es nicht? – abatishchev

+0

Haben Sie die Navigationseigenschaft zugeordnet? – abatishchev

+0

p.PeopleClub ist gültig, aber ich kann auf keine der Spalten in p.PeopleClub zugreifen. Dies ist der Fehler, wenn ich versuche: 'System.Data.Objects.DataClasses.EntityCollection ' enthält keine Definition für 'DisplaySequence' und keine Erweiterungsmethode 'DisplaySequence', die ein erstes Argument vom Typ akzeptiert 'System.Data.Objects.DataClasses.EntityCollection ' könnte gefunden werden (fehlt eine using-Direktive oder eine Assembly-Referenz?) – scw

Antwort

2

Versuchen von Navigationseigenschaften:

using System.Data.Entity;         // notice using 

var q = from p in context.People 
          .Include(p => p.PeopleClub)  // notice lambda instead of string 
          .Include(p => p.PeopleClub.Club) // you may not need that though 
     orderby p.FirstName, p.ClubPerson.DisplaySequence 
     select p; 

oder regelmäßige beitreten:

var q = from p in db.People 
     join pc in db.PeopleClub on p.PersonID equals pc.PersonID 
     join c in db.Clubs on pc.ClubID equals c.ClubID 
     orderby p.FirstName, pc.DisplaySequence 
     select p; 
+0

.Include erwartet eine Zeichenfolge, so wird es mich nicht tun lassen. – scw

+0

@scw: Wenn Sie den folgenden Namespace hinzufügen, findet der Compiler eine Erweiterungsmethode, die Lambda akzeptiert. – abatishchev

+0

Downvote? Wie wäre es zu interessieren, um zu kommentieren? – abatishchev

Verwandte Themen