【问题标题】:Copy List to Different List Using LINQ使用 LINQ 将列表复制到不同的列表
【发布时间】:2013-04-22 07:52:23
【问题描述】:

我有一个来自数据库的实体,我想将数据复制到另一个具有以下字段的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 - 一个空字符串。 如何实现这一点?

【问题讨论】:

    标签: c# .net linq entity-framework-4


    【解决方案1】:

    我会改为使用Select 子句在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()
    

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 2014-10-05
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2014-09-27
      相关资源
      最近更新 更多