外连接和Linq

时间:2008-12-22 18:36:07

标签: linq linq-to-sql outer-join

所以我有以下代码:

  return from a in DBContext.Acts
         join artist in DBContext.Artists on a.ArtistID equals artist.ID into art
         from artist in art.DefaultIfEmpty()

         select new Shared.DO.Act
         {
             ID = a.ID,
             Name = a.Name,
             Artist = new Shared.DO.Artist
             {
                 ID = artist.ID,
                 Name = artist.Name
             },
             GigId = a.GigID
         };

这会加载一个act对象,并将它从linq对象调整到我的域act对象。

正如您所看到的,我已经在艺术家身上定义了一个外部联接来表达关系。

我这样做是因为我总是想要这个行为,不管它是否有艺术家。

如果该行为确实有艺术家,那么这种方式非常有效。

如果没有,那么代码就会死掉。这是罪魁祸首:

 Artist = new Shared.DO.Artist
          {
              ID = artist.ID,
              Name = artist.Name
          },

如果我删除它,它的罚款。是否有可能做我正在尝试的事情?

3 个答案:

答案 0 :(得分:2)

           Artist = new Shared.DO.Artist
           {
               ID = artist == null ? Guid.NewGuid() : artist.ID,
               Name = artist == null ? string.Empty : artist.Name
           }

或者,向Shared.DO.Artist添加一个构造函数,该构造函数接受Artist的Linq表示。构造函数可以检查null并执行所有初始化。

答案 1 :(得分:1)

实际上......这对我来说似乎是最好的答案....

Artist = artist == null ? null : new Shared.DO.Artist
                    {
                       ID =  artist.ID,
                       Name = artist.Name
                    },

答案 2 :(得分:0)

您想通过调用构造函数来创建新对象。删除Artist =然后将{}替换为()。