0

所以我有以下代码:

  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
         };

这会加载一个行为对象并将其从 linq 对象调整为我的域行为对象。

正如你所看到的,我已经在艺术家上定义了一个外部连接来执行关系。

我这样做是因为我一直想要这个表演,不管它是否有艺术家。

如果该行为确实有艺术家,这将非常有效。

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

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

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

4

3 回答 3

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 并执行所有初始化。

于 2008-12-22T18:45:50.670 回答
1

其实……这对我来说似乎是最好的答案……

Artist = artist == null ? null : new Shared.DO.Artist
                    {
                       ID =  artist.ID,
                       Name = artist.Name
                    },
于 2008-12-22T18:53:12.107 回答
0

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

于 2008-12-22T18:41:33.020 回答