2013-01-14 8 views
7

próbuje uzyskać nazwę koncertu, datę i miejsce (które jest przechowywane na innym stole) , ale wydaje się, że nie działa, ale nadal zwraca wartość null.Zapytanie linq jeden do jednego

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:

Zależność między Venue i koncert jest to, że koncert ma VenueID, który odnosi się do identyfikatora miejsca. Muszę przekazać ciąg z powrotem. coś

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

należy użyć właściwości nawigacyjnych. ('f.Venue.Address') – SLaks

+0

Czy to' StartsWith' lub 'Contains'? – Romoku

+3

Czy jest jakaś potrzeba .ToString()?, Czy istnieje również typ rzeczywisty w twoim modelu między miejscami i tabelami koncertów? dostarczyć więcej informacji. – MuhammadHani

Odpowiedz

13

można użyć, aby uzyskać grupy dołączyć wszystkie miejsca związane z Koncertu

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) 
      }; 

Wykorzystanie wyników:

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

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

wystarczy zmienić Venues = g.Select (x => v.Address) do Venues = g.Select (x => x .Address) To działa świetnie. jest to relacja 1: 1, więc nie sądzę, że będę potrzebował drugiego foreach. Dzięki! – datatest

+0

@ datatest thanks! I przepraszam za literówkę, na pewno powinien to być "x.Address" –

0

Jeśli masz relacji klucza obcego skonfigurować, nie trzeba ręcznie kwerendy dla lokali. W takim przypadku otrzymasz miejsce przy pomocy f.Venue.

+0

dobrze mogę zrobić f. Venue, nie mogę zrobić f. Venue.Address. i nie wiesz, jak uzyskać adres – datatest

+0

Dlaczego nie możesz? – recursive

2

Wygląda na to, że można bezpiecznie przyjąć relację 1: 1 między koncertami i lokalami. Biorąc pod uwagę, że można użyć zamiast tego join.

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

jesteś poprawny w stosunku 1: 1. chociaż przy próbie kodu dostaję, nie mogę rozwiązać nazwy, na v i f ... – datatest