4

私はこのクラスを持っています:

class OriginalClass {
  string FirstItem;
  List<string> ListOfSecondItems;
}

あるクラスのリストを別のクラスのリストに変換するか、このクラスを新しいクラスに「フラット化」したいと思います。

class FlattenedClass {
  string First;
  string Second;
}

このLINQ式を使用して、次の式に変換しています。

OriginalClass original;
var flattened = from Item in original
  from secondItem in item.ListOfSecondItems
  select new FlattenedClass(item.FirstItem, secondItem);

問題は、2番目のアイテムのリストが空の場合、最初のアイテムを失うことです。リストがnullまたは空の場合に使用する「(デフォルト)」値が必要です。重要だと思いDefaultIfEmptyますが、既存のクエリに組み込む方法がわかりません。

4

1 に答える 1

3

この呼び出しは次のようにDefaultIfEmpty述べています。「そのListOfSecondItemsが空の場合は、代わりに単一のnullを使用してください。」

var flattened =
  from Item in original
  from secondItem in item.ListOfSecondItems.DefaultIfEmpty()
  select new FlattenedClass(item.FirstItem, secondItem); 

あなたの質問は、ListOfSecondItemsがnullである可能性について言及しています。このコードはその可能性を処理します。また、nullの代わりにデフォルトの文字列を提供します(他のバージョンのDefaultIfEmptyを使用)。

var flattened =
  from Item in original
  let subList = item.ListOfSecondItems ?? new List<string>()
  from secondItem in subList.DefaultIfEmpty("(default)")
  select new FlattenedClass(item.FirstItem, secondItem); 
于 2012-06-25T14:56:38.623 に答える