我很接近,但没有得到完全正确的结果。我想要的是这样的:
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/