2013-01-14 20 views
7

versuchen, den Konzertnamen, Datum und Ort (die auf einer anderen Tabelle gespeichert ist) , aber es scheint nicht zu funktionieren, aber es zieht Null zurück.linq Abfrage eins zu eins

var test = from f in db.Concert 
      where f.Name.StartsWith(concertName) 
      select new 
      { 
       f.Name, 
       f.StartDateTime, 
       venues = from v in db.Venues 
         where v.ID == f.VenueID 
         select v.Address 
      } 

Edit:

Die Beziehung zwischen Ort und Konzert ist, dass Konzert ein VenueID hat, die zum Veranstaltungsort ID bezieht. Ich muss eine Schnur zurückgeben. etwas wie

foreach (var e in test) 
{ 
    html += "<div> e.Name +":" + e.Address </div>; 
} 
+0

Sie Navigationseigenschaften verwenden sollten. ('f.Venue.Address') – SLaks

+0

Ist es' StartsWith' oder 'Contains'? – Romoku

+3

Gibt es einen Bedarf für .ToString()?, Gibt es in Ihrem Modell auch irgendeine Art von Beziehung zwischen Veranstaltungsorten und Konzerten? bieten mehr Informationen. – MuhammadHani

Antwort

13

Sie können Gruppe verwenden beitreten alle Veranstaltungsorte Konzert

var test = from f in db.Concert 
      join v in db.Venues on f.VenueID equals v.ID into g 
      where f.Name.StartsWith(concertName) 
      select new 
      { 
       f.Name, 
       f.StartDateTime, 
       Venues = g.Select(x => x.Address) 
      }; 

Verwendung der Ergebnisse im Zusammenhang zu bekommen:

foreach (var e in test) 
{ 
    // e.Name 
    // e.StartDateTime 

    foreach(var address in e.Venues) 
     // address 
} 
+1

musste gerade die Venues ändern = g.Select (x => v.Address) zu den Venues = g.Select (x => x .Address) Das funktioniert super. es ist eine 1: 1 Beziehung, also glaube ich nicht, dass ich die zweite foreach brauche. Vielen Dank! – datatest

+0

@datatest danke! Und sorry für Tippfehler, sicher sollte es 'x.Address' sein –

0

Wenn Sie eine Fremdschlüsselbeziehung eingerichtet haben, müssen Sie die Orte nicht manuell abfragen. In diesem Fall erhalten Sie die Locations mit f.Venue.

+0

gut ich kann f.Venue tun, kann ich f.Venue.Address nicht tun. und nicht sicher, wie Sie die Adresse bekommen – datatest

+0

Warum können Sie nicht? – recursive

2

Es sieht so aus, als ob es sicher ist, eine 1: 1-Beziehung zwischen Konzerten und Venues anzunehmen. In Anbetracht dessen können Sie stattdessen join verwenden.

var test = from f in db.Concert 
      join v in db.Venues on v.ID equals f.VenueID 
      where f.Name.StartsWith(concertName) 
      select new 
      { 
       f.Name, 
       f.StartDateTime, 
       v.Address 
      }; 
+0

Sie sind korrekt über die 1: 1-Beziehung. obwohl, wenn ich deinen Code versuche, kann ich Name nicht auflösen, auf dem v und f ... – datatest

Verwandte Themen