c# - LINQ.Aggregate 返回不正确的结果

标签 c# string linq aggregate

我很接近,但没有得到完全正确的结果。我想要的是这样的:

Market eq 'Seattle' or Market eq 'Denver'

等下面是一些示例代码:

List<string> list = new List<string>();
list.Add("Seattle");
list.Add("Portland");
list.Add("San Francisco");
list.Add("Denver");
list.Add("Boston");

string field = "Market";

string result = list.Aggregate((i,j) => $"{field} eq '{i}' or {field} eq '{j}'");

这是我从这段代码中得到的:

Market eq 'Market eq 'Market eq 'Market eq 'Seattle' or Market eq 'Portland'' or Market eq 'San Francisco'' or Market eq 'Denver'' or Market eq 'Boston'

最佳答案

如果你想把它写成聚合,你可以使用:

list.Select(i => $"{field} eq '{i}'").Aggregate((i,j) => $"<b>{i}</b> or {j}");

由于 i 是您在上一步中获得的结果。因此,问题是我们每次都会在这里追加字符串,使它成为一个 O(n2) 算法(n 的长度结果)。

但这效率很低。您可能想要的是使用:

string.Join(" or ", list.Select(i => $"{field} eq '{i}'"));

这(可能)更有效,但在我看来,它也更具可读性:它几乎从字面上解释了您想做什么。

两者都产生:

csharp> list.Select(i => $"{field} eq '{i}'").Aggregate((i,j) => $"{i} or {j}");
"Market eq 'Seattle' or Market eq 'Portland' or Market eq 'San Francisco' or Market eq 'Denver' or Market eq 'Boston'"
csharp> string.Join(" or ", list.Select(i => $"{field} eq '{i}'"));
"Market eq 'Seattle' or Market eq 'Portland' or Market eq 'San Francisco' or Market eq 'Denver' or Market eq 'Boston'"

关于c# - LINQ.Aggregate 返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47041743/

相关文章:

linq - 根据条件查看 IEnumerable<T> 是否包含项目的最快方法

c# - LINQ 不会用 float 对组求和吗?属性(property)

c# - 不了解在系统架构中的何处创建 IoC 容器

ios - 以这种方式使用 StringByAppendingString 有多安全?

c# - 如何从 C# 中的字符串中获取特定行?

c - 递归strcpy函数

c# - 将文件过滤器应用于文件名的字符串 [],而不打开 OpenFileDialog

c# - C# 中的 MSAccess Conn (VS 2010)

c# - 无法从 ASP.NET 网页发送邮件

c# - 如何通过删除 if 检查使代码面向对象?