2013-04-22 38 views
2

我有一個來自數據庫的實體,我想將數據複製到另一個具有以下字段的class。這裏是使用LINQ將列表複製到不同列表中

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()爲null我得到異常(這是正常的),但我希望有作曲,如果有任何或者如果不是 - 一個空字符串。 如何實現這個任何想法?

回答

6

我會改變FirstOrDefault或默認調用之前使用Select子句選擇名稱,然後使用空合併運算符:

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

(這是假設m.Originator永遠不能爲null匹配項,當然)

或者你可以使用DefaultIfEmpty其次是剛剛First

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