2013-01-14 13 views
7

コンサート名、日付、会場(別の表に格納されています)を取得しようとしましたが、動作していないようですが、nullを戻し続けます。linqクエリ1対1

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の関係ので、私は2番目のforeachが必要になるとは思わない。ありがとう! – datatest

+0

@datatestありがとう!そして誤ってタイプミスがあった場合は、 'x.Address' –

0

外部キーの関係が設定されている場合、会場を手動で照会する必要はありません。その場合は、f.Venueを使用して会場を取得します。

+0

と一致するFK会場IDを持っています。私は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