gpt4 book ai didi

c# - GroupJoin 返回序列不包含任何元素

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:24 25 4
gpt4 key购买 nike

我有这 2 个列表 list1 和 list2 并创建了这个 GroupJoin:

List1 是人员列表(Id、姓名),list2 是对象列表(Id、Car、Date)。

PS:list1 包含大约 40 个元素,而 list2 目前只有一个元素。

我尝试设置 maxDate 但出现错误“序列不包含任何元素”

var result = list1.GroupJoin(list2, 
l1 => l1.Id,
l2 => l2.Id
(a, b) => new
{
listA = a,
maxDate = b?.Max(m => m.Date).Date ??
new DateTime(2000, 01, 01)
}).ToList();

最佳答案

查看表达式 b?.Max,看起来您期望表示内部列表相关元素的变量 b 将是 null 当没有匹配时。

但是GroupJoin文档明确指出:

If there are no correlated elements in inner for a given element of outer, the sequence of matches for that element will be empty but will still appear in the results.

所以 b 永远不会是 null 并且 Max 在它为空时抛出有问题的异常。

您可以通过两种方式解决它。

首先是使用 Max 的可空重载,它返回 null 而不是在空序列上抛出异常:

maxDate = b.Max(m => (DateTime?)m.Date.Date) ?? new DateTime(2000, 01, 01)

这适用于 EnumerableQueryable 实现。

仅适用于 Enumerable 的第二种方法是结合使用 SelectDefaultIfEmptyMax :

maxDate = b.Select(m => m.Date.Date).DefaultIfEmpty(new DateTime(2000, 01, 01)).Max()

关于c# - GroupJoin 返回序列不包含任何元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54914418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com