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)
但这不起作用.
有什么建议?
Aggregate如果没有提供,则使用序列中的第一项作为累加器.如果序列中没有项目,则无法执行此操作,因此在这种情况下会引发异常.您可以提供明确的初始值,即
.Aggregate(string.Empty, (i, j) => i + ";" + j)
Run Code Online (Sandbox Code Playgroud)
请注意,这种连接字符串的方法效率低下并且会产生大量的中间垃圾.您可以使用string.Join虽然不清楚为什么您立即将结果拆分";"到下一行.
| 归档时间: |
|
| 查看次数: |
2551 次 |
| 最近记录: |