gpt4 book ai didi

c# - 在 foreach 循环中使用 predicatebuilder 时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 23:17:45 25 4
gpt4 key购买 nike

我在 foreach 循环中构建谓词时遇到问题。包含枚举器当前值的变量是我需要放入谓词的内容。

所以,

IQueryable query = getIQueryableSomehow();
Predicate = PredicateBuilder.False<SomeType>();
foreach (SomeOtherType t in inputEnumerable)
{
Predicate = Predicate.Or( x => x.ListInSomeType.Contains(t) )
}
var results = query.Where(Predicate);

让我失望了。 Predicate 中的表达式 ORed 基本上都使用来自 inputEnumerable 的相同 t,当然我希望每个表达式 ORed 到 Predicate 以使用来自 inputEnumerable 的不同 t。

我在循环后查看调试器中的谓词,它看起来像 IL。无论如何,那里的每个 lambda 看起来都完全一样。

谁能告诉我我这里可能做错了什么?

谢谢,

艾萨克

最佳答案

问题是闭包是如何工作的。您必须在本地复制 SomeOtherType t 实例,例如:

foreach (SomeOtherType t in inputEnumerable) 
{
SomeOtherType localT = t;
Predicate = Predicate.Or( x => x.ListInSomeType.Contains(localT) )
}

更多信息,请参阅:Captured variable in a loop in C#

关于c# - 在 foreach 循环中使用 predicatebuilder 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816036/

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