使用LINQ将列表复制到不同的列表

lev*_*evi 2 .net c# linq entity-framework-4

我有一个来自数据库的实体,我想将数据复制到另一个class具有以下字段的数据.这里是

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,
                });
Run Code Online (Sandbox Code Playgroud)

问题:Composer = m.MediaItemOriginators.Where(mo => mo.OriginatorType.OriginatorTypeId == 3).FirstOrDefault()为null时,我得到异常(这是正常的),但是如果有任何或者没有,我想拥有Composer - 一个空字符串. 怎么实现这个想法?

Jon*_*eet 6

我将更改为使用Select子句在FirstOrDefault默认调用之前选择名称,然后使用null合并运算符:

Composer = m.MediaItemOriginators
            .Where(mo => mo.OriginatorType.OriginatorTypeId == 3)
            .Select(mo => m.Originator.Firstame)
            .FirstOrDefault() ?? ""
Run Code Online (Sandbox Code Playgroud)

(m.Originator当然,假设匹配条目永远不会为空.)

或者你可以使用DefaultIfEmpty后面只是First:

Composer = m.MediaItemOriginators
            .Where(mo => mo.OriginatorType.OriginatorTypeId == 3)
            .Select(mo => m.Originator.Firstame)
            .DefaultIfEmpty("")
            .First()
Run Code Online (Sandbox Code Playgroud)