gpt4 book ai didi

c# - Linq 集合在 foreach 的下一次迭代中重置

转载 作者:行者123 更新时间:2023-11-30 19:31:28 24 4
gpt4 key购买 nike

我有以下 foreach 表达式,我在其中构建谓词,然后通过执行 .Where() 过滤集合。

但令我难过的是,result.Count() 甚至在我在下一次迭代中执行 .Where() 之前就给了我 0 .

var result = SourceCollection;

foreach (var fieldName in FilterKeys)
{
if (!conditions.ContainsKey(fieldName)) continue;
if (!conditions[fieldName].IsNotNullOrEmpty()) continue;
var param = conditions[fieldName];
Func<BaseEntity, bool> predicate = (d) => fieldName != null && d.GetFieldValue(fieldName).ContainsIgnoreCase(param);
result = result.Where(predicate);
}

有人知道我可能忽略的导致此问题的任何 LINQ 行为吗?

最佳答案

我想,你想要这个:

var result = SourceCollection;

foreach (var fieldName in FilterKeys)
{
if (!conditions.ContainsKey(fieldName)) continue;
if (!conditions[fieldName].IsNotNullOrEmpty()) continue;
var param = conditions[fieldName];
var f = fieldName
Func<BaseEntity, bool> predicate = (d) => f != null && d.GetFieldValue(f).ContainsIgnoreCase(param);
result = result.Where(predicate);
}

注意谓词中 f 的使用。您不想捕获 foreach 变量。在您的原始代码中,当第二次迭代开始时,param 仍然是第一次迭代捕获的值,但 fieldName 已更改。

关于c# - Linq 集合在 foreach 的下一次迭代中重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7171359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com