C# 使用LINQ将列表复制到不同的列表
我有一个来自数据库的实体,我想将数据复制到另一个具有以下字段的C# 使用LINQ将列表复制到不同的列表,c#,.net,linq,entity-framework-4,C#,.net,Linq,Entity Framework 4,我有一个来自数据库的实体,我想将数据复制到另一个具有以下字段的类中。给你 var list = mediaItems.Select(m => new MediaItemView { ImageUrl = m.ImageURL, LongDesc = m.LongDescription, Title = m.Title,
类中。给你
var list = mediaItems.Select(m => new MediaItemView
{
ImageUrl = m.ImageURL,
LongDesc = m.LongDescription,
Title = m.Title,
Price = m.PriceNoVAT,
Composer = m.MediaItemOriginators.Where(mo => mo.OriginatorType.OriginatorTypeId == 3).FirstOrDefault().Originator.Firstname,
Arranger = m.MediaItemOriginators.Where(mo => mo.OriginatorType.OriginatorTypeId == 2).FirstOrDefault().Originator.Firstname,
});
问题:当Composer=m.MediaItemOriginators.Where(mo=>mo.OriginatorType.OriginatorTypeId==3.FirstOrDefault()
为空时,我会收到异常(这是正常的),但如果有或没有,我希望有一个空字符串。
如何实现这个想法?我将更改为使用Select
子句在FirstOrDefault
或默认调用之前选择名称,然后使用空合并运算符:
Composer = m.MediaItemOriginators
.Where(mo => mo.OriginatorType.OriginatorTypeId == 3)
.Select(mo => m.Originator.Firstame)
.FirstOrDefault() ?? ""
(当然,这是假设匹配条目的m.Originator
永远不会为空。)
或者您可以使用DefaultIfEmpty
,后面紧跟第一个:
Composer = m.MediaItemOriginators
.Where(mo => mo.OriginatorType.OriginatorTypeId == 3)
.Select(mo => m.Originator.Firstame)
.DefaultIfEmpty("")
.First()