Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使Linq实体对象适应域对象_Asp.net Mvc_Linq_Dns_Adaption - Fatal编程技术网

Asp.net mvc 使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

我有以下代码将linq实体适配到我的域对象:

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的观点,如果涉及到单一关系,那么连接可能更符合您的要求。

是我还是您的域对象实际上是域对象的精确副本?为什么要区分呢?“不编译”意味着你收到了一条消息。有什么消息?