【发布时间】:2016-06-16 10:52:01
【问题描述】:
请帮帮我。我有一个带有许多过滤条件的 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();
但这不起作用。
有什么建议吗?
【问题讨论】:
-
什么是
linqkb,这个序列中的元素是什么类型? -
可以尝试拆分调用,调试中间结果。
Status = "Approved"可能没有元素。DefaultIfEmpty只提供了另一个空序列 afaik。 -
你为什么加入
";"只是为了在下一行再次拆分它?最简单的异常修复方法是为Aggregate提供一个初始值,即Aggregate("", (i, j) => i + ";" + j)。
标签: c# linq aggregate sequence