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

问题是如果第二个项目的列表是空的,我会丢失第一个项目。如果列表为空或为空,我想使用一些“(默认)”值。我想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(使用其他版本的 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 回答