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

use*_*808 1 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();
Run Code Online (Sandbox Code Playgroud)

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

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

我是linQ的新手.请建议.

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

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

但这不起作用.

有什么建议?

Lee*_*Lee 5

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

.Aggregate(string.Empty, (i, j) => i + ";" + j)
Run Code Online (Sandbox Code Playgroud)

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