Asp.net mvc 使Linq实体对象适应域对象
我有以下代码将linq实体适配到我的域对象:Asp.net mvc 使Linq实体对象适应域对象,asp.net-mvc,linq,dns,adaption,Asp.net Mvc,Linq,Dns,Adaption,我有以下代码将linq实体适配到我的域对象: return from g in DBContext.Gigs select new DO.Gig { ID = g.ID, Name = g.Name, Description = g.Description, StartDate
return from g in DBContext.Gigs
select new DO.Gig
{
ID = g.ID,
Name = g.Name,
Description = g.Description,
StartDate = g.Date,
EndDate = g.EndDate,
IsDeleted = g.IsDeleted,
Created = g.Created,
TicketPrice = g.TicketPrice
};
这个很好用
但是,我现在想填充一个域对象Venue对象,并将其添加到同一语句中的gig中。这是我的尝试
return from g in DBContext.Gigs
join venue in DBContext.Venues on g.VenueID equals venue.ID
select new DO.Gig
{
ID = g.ID,
Name = g.Name,
Description = g.Description,
StartDate = g.Date,
EndDate = g.EndDate,
IsDeleted = g.IsDeleted,
Created = g.Created,
TicketPrice = g.TicketPrice,
Venue = from v in DBContext.Venues
where v.ID == g.VenueID
select new DO.Venue
{
ID = v.ID,
Name = v.Name,
Address = v.Address,
Telephone = v.Telephone,
URL = v.Website
}
};
然而,这并不编译
是否可以使用“选择新”方法调整子对象
我做错了什么?为什么要进行连接和子选择?您可以使用您的加入结果创建一个新的场地。请注意,如果演出和场地之间没有一对一的关系,你可能会遇到麻烦 试试这个:
return from g in DBContext.Gigs
join venue in DBContext.Venues on g.VenueID equals venue.ID
select new DO.Gig { ID = g.ID, Name = g.Name, Description = g.Description,
StartDate = g.Date, EndDate = g.EndDate, IsDeleted = g.IsDeleted,
Created = g.Created, TicketPrice = g.TicketPrice,
Venue = new DO.Venue { ID = venue.ID, Name = venue.Name,
Address = venue.Address, Telephone = v.Telephone,
URL = v.Website }
内部LINQ查询返回多个对象,而不仅仅是一个。您想用一个调用来结束它,如:
Venue = (from v in DBContext.Venues
where v.ID == g.VenueID
select new DO.Venue
{
ID = v.ID,
Name = v.Name,
Address = v.Address,
Telephone = v.Telephone,
URL = v.Website
}).SingleOrDefault()
选择Single()与SingleOrDefault()与First()与FirstOrDefault()取决于查询的类型,但我猜您需要前两种查询中的一种。(如果查询没有数据,“OrDefault”变量返回null;其他变量则抛出。)
我也同意Mike的观点,如果涉及到单一关系,那么连接可能更符合您的要求。是我还是您的域对象实际上是域对象的精确副本?为什么要区分呢?“不编译”意味着你收到了一条消息。有什么消息?