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,
                });

問題:が nullの場合、Composer = m.MediaItemOriginators.Where(mo => mo.OriginatorType.OriginatorTypeId == 3).FirstOrDefault()例外が発生します (これは正常です) が、Composer がある場合、またはない場合 - 空の文字列が必要です。 これを達成する方法はありますか?

4

1 に答える 1

6

またはデフォルトの呼び出しSelectの前に句を使用して名前を選択するように変更し、次に null 合体演算子を使用します。FirstOrDefault

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()
于 2013-04-22T07:55:31.373 に答える