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

本文关键字:列表 复制 使用 LINQ | 更新日期: 2023-09-27 18:10:21

我有一个来自数据库的实体,我想将数据复制到具有以下字段的另一个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,
                });

问题:Composer = m.MediaItemOriginators.Where(mo => mo.OriginatorType.OriginatorTypeId == 3).FirstOrDefault()是空我得到异常(这是正常的),但我想有作曲家,如果有任何或如果没有-一个空字符串。如何实现这一点有什么想法吗?

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

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

Composer = m.MediaItemOriginators
            .Where(mo => mo.OriginatorType.OriginatorTypeId == 3)
            .Select(mo => m.Originator.Firstame)
            .FirstOrDefault() ?? ""

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

或者你可以使用DefaultIfEmptyFirst:

Composer = m.MediaItemOriginators
            .Where(mo => mo.OriginatorType.OriginatorTypeId == 3)
            .Select(mo => m.Originator.Firstame)
            .DefaultIfEmpty("")
            .First()