2

我有一个来自数据库的实体,我想将数据复制到另一个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()为空时,我得到异常(这是正常的),但如果有的话,我想拥有 Composer - 一个空字符串。 如何实现这个任何想法?

4

1 回答 1

6

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

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

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

或者您可以使用DefaultIfEmpty后跟First

Composer = m.MediaItemOriginators
            .Where(mo => mo.OriginatorType.OriginatorTypeId == 3)
            .Select(mo => m.Originator.Firstame)
            .DefaultIfEmpty("")
            .First()
于 2013-04-22T07:55:31.373 回答