2013-01-14 60 views
7

試圖讓演唱會的名稱,日期和地點(存儲在另一個表) 但它似乎並沒有工作,但它一直向後拉空。LINQ查詢一對一

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 
      } 

編輯:

場館和音樂會之間的關係是音樂會具有涉及地點ID的VenueID。我需要傳回一個字符串。像

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

您應該使用的導航性能。 ('f.Venue.Address') – SLaks

+0

它是'StartsWith'還是'Contains'? – Romoku

+3

是否需要.ToString()?,場地和音樂會表格之間的模型中是否還有任何類型的實用性?提供更多信息。 – MuhammadHani

回答

13

您可以使用組結合來獲得有關演唱會的結果

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

使用所有場館:

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

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

只需要更改Venues = g.Select(x => v.Address)Venues = g.Select(x => x .Address) 這很好。它的1:1關係,所以我不認爲我會需要第二個foreach。謝謝! – datatest

+0

@最感謝!對於錯字,確定它應該是'x.Address' –

0

如果您設置了外鍵關係,則無需手動查詢場地。在這種情況下,您使用f.Venue獲得場地。

+0

相匹配,我可以做f.Venue,我不能做f.Venue.Address。並不知道如何獲得地址 – datatest

+0

爲什麼你不能? – recursive

2

看起來假設音樂會和場地之間的1:1關係是安全的。鑑於此,您可以改用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

你是正確的1:1關係。儘管當你嘗試你的代碼時,我得到無法解析的名稱,在v和f ... – datatest