Linq查询一对一

本文关键字:一对一 查询 Linq | 更新日期: 2023-09-27 17:52:53

试图获取音乐会的名称、日期和地点(存储在另一个表中)但它似乎不工作,但它一直拉回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相关的VenueID。我需要传回一个字符串。就像

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

Linq查询一对一

您可以使用group join来获取所有与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
}

假设Concerts和场馆之间是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
           };

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