2012-08-09 3 views
0

Quelqu'un peut-il s'il vous plaît me dire la plus courte pour cette requête:requête courte pour cette longue

 var guestpartyids = db.CeremonyGuestParties.Where(p => p.CeremonyId == id) 
          .Select(p => p.GuestPartyId); 
     List<GuestParty> guestparties = new List<GuestParty>(); 
     foreach (var party in guestpartyids) 
     { 
      guestparties.Add(db.GuestParties.Single(p => p.Id == party)); 
     } 

Répondre

2

Cela devrait le faire.

guestparties.AddRange(
    from cgp in db.CeremonyGuestParties 
    where cgp.CeremonyId == id 
    join gp in db.GuestParties on cgp.GuestPartyId equals gp.Id 
    select gp 
); 

S'il vous plaît noter que cela se traduira par un appel de base de données, où votre code entraînera 1 + N requêtes. Mais il ne va pas s'assurer qu'il n'y a qu'un seul identifiant correspondant, comme le ferait Single(). Cela devrait être appliqué sur la base de données de toute façon, et non dans le code.

0

Que diriez-vous:

List<GuestParty> guestparties = from cgp in db.CeremonyGuestParties. 
           Where cgp.CeremonyId .id == id) 
           select cgp.Guestparties.ToList(); 
Questions connexes