我有这门课:
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);
问题是如果第二项列表为空,我会丢失第一项。如果列表为 null 或为空,我想使用一些“(默认)”值。我想 DefaultIfEmpty
是关键,但不知道如何将它合并到现有查询中。
最佳答案
对 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);
关于c# - 如何在嵌套查询中使用 DefaultIfEmpty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11191714/