c# - LinQ 聚合错误 - 序列不包含任何元素

标签 c# linq aggregate sequence

请帮帮我。我有一个包含许多过滤条件的 LinQ 查询。

下面是我的查询:

var Aggregate = linqkb.Where(s => s.Status.Equals("Approved")).Select(s => s.Approver)
    .Distinct()
    .Aggregate((i, j) => i + ";" + j)
    .Split(';')
    .Distinct();

在某些情况下,我收到错误:

Error Message : Sequence contains no elements
Stack Trace   : at System.Linq.Enumerable.Aggregate[TSource](IEnumerable`1 source, Func`3 func)

我是 linQ 的新手。请建议。

我用谷歌搜索并尝试在 Aggregator 之前使用 **.DefaultIfEmpty()** ,如下所示:

var Aggregate = linqkb.Where(s => s.Status.Equals("Approved")).Select(s => s.Approver)
    .Distinct()
    .DefaultIfEmpty()
    .Aggregate((i, j) => i + ";" + j)
    .Split(';')
    .Distinct();

但这行不通。

有什么建议吗?

最佳答案

如果未提供,

Aggregate 使用序列中的第一项作为累加器。如果序列中没有项目,则无法完成此操作,因此在这种情况下会抛出异常。您可以提供一个明确的初始值,即

.Aggregate(string.Empty, (i, j) => i + ";" + j)

请注意,这种连接字符串的方法效率低下并且会产生大量中间垃圾。您可以使用 string.Join,但不清楚为什么您会立即在下一行的 ";" 上拆分结果。

关于c# - LinQ 聚合错误 - 序列不包含任何元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857081/

相关文章:

c# - 用于验证 oracle 编号的有效正则表达式

c# - 如何在 linq 中展平字典 <string,List<string>> 并将键保留在结果中

r - 如何总结重复值并保留 R 上的所有行

mysql - 聚合MySQL中两个表之间的数据

c# - 为加权图生成邻接矩阵

c# - 将上传的文件存储在数据库中或将其存储在文件系统中哪个好

c# - 将数组作为 `params` 参数传递

c# - 列表模型 --> orderbydescending System.DateTime 不起作用?

c# - 在 Entity Framework 中将 tinyint 字段表示为枚举

python - 在 Pandas 数据框中按组过滤具有最小值的行