我有一个包含日期的对象:
class MyObj
{
public DateTime? Date {get; set;}
}
正如你所见,Date
是可空的。是否可能使用 LINQ
的 GroupBy
方法对包括 null
的日期在内的 List<MyObj>
进行分组?
想要得到这样的结果:{具有日期1的元素,具有日期2的元素,...,没有日期的元素}
?
测试并不是特别困难。这是我的代码:
var items = new []
{
new MyObj() { Date = null },
new MyObj() { Date = null },
new MyObj() { Date = DateTime.Now },
};
var grouped = items.GroupBy(x => x.Date);
GroupBy
方法是一个扩展方法,这意味着它是一个静态方法,接受您的日期作为参数。它的书写格式为 listWithNulls.GroupBy()
,但实际上被视为 GroupBy(listWithNulls)
。由于这种行为,可以处理 null
值,因此您不会遇到 NullReferenceException
。请查看扩展方法的定义,这有助于了解如何使用它们:public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
this IEnumerable<TSource> source
,这使得可以使用简短的方式 source.GroupBy()
。Date
属性中的null
值,而不是源可枚举对象。这就是为什么我提出了这个问题。 - Enigmativitynull
的。该回答不适用于列表项为null
的情况。如果元素为null
,则keySelector
谓词将失败。 - Enigmativity
SQL
语言可以做到这一点。按组分组所有内容,甚至将空值放入一个袋子中。 - Nickon.GroupBy()
方法。 - PatrikDate
属性。他通过询问“包括null
的日期”和“没有日期的元素”来明确这一点。最后一个问题不是“空元素”。 - Enigmativity