linq查询一对一

时间:2013-01-14 18:04:05

标签: c# linq linq-to-sql

试图获取音乐会名称,日期和地点(存储在另一张桌子上) 但它似乎没有起作用,但它一直在拉回null。

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
           }

编辑:

Venue和Concert之间的关系是Concert有一个VenueID与Venue ID相关。我需要传回一个字符串。

之类的东西
foreach (var e in test)
{
   html += "<div> e.Name +":" + e.Address </div>;
}

3 个答案:

答案 0 :(得分:13)

您可以使用群组联接来获取与Concert相关的所有场地

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 :(得分: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
           };

答案 2 :(得分:0)

如果您设置了外键关系,则无需手动查询场地。在这种情况下,您可以使用f.Venue获得场地。