请帮帮我。我有一个包含许多过滤条件的 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/