所以我有以下代码:
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
},
如果我删除它,它的罚款。是否有可能做我正在尝试的事情?
答案 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 =然后将{}替换为()。