gpt4 book ai didi

C# 如何在循环中组合一些 Linq 表达式

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:41 25 4
gpt4 key购买 nike

我想结合一些 Linq 表达式,所以我从以下文章中获得帮助:

http://www.c-sharpcorner.com/uploadfile/04fe4a/predicate-combinators-in-linq/http://thanhhh.blogspot.com/2011/10/linq-to-entities-predicatebuilder-and.html

我有一个像这样的通用列表:

List<long> lstPA = new List<long>() { 2, 3 }; // the numbers can be added or removed

如果我在代码下使用组合我的 linq 表达式,我从 db 得到正确的结果(记录)(我使用 Entity Framework 4.0):

var exp1 = Predicate.FalseExpression<posts>();            
exp1 = exp1.Or(x => x.post_author == 2);
exp1 = exp1.Or(x => x.post_author == 3);

但是当我像这样在 foreach 循环中组合 linq 表达式时:

var exp1 = Predicate.FalseExpression<posts>();
foreach (long id in lstPA)
{
exp1 = exp1.Or(x => x.post_author == id);
}

我无法从数据库中获得正确的结果(记录)。

两个代码块有什么区别,如何解决这个问题(我必须使用 foreach 循环)?

最佳答案

我认为您的问题与关闭有关。变量 id 被分配给表达式,每次循环时它都会更新为一个新值。为了使用它,您需要制作一个单独作用域的变量。

var exp1 = Predicate.FalseExpression<posts>();
foreach (long i in lstPA)
{
long id = i;
exp1 = exp1.Or(x => x.post_author == id);
}

但是,在这种情况下,您可以只使用 contains 子句。

expr1 = x => lstPA.Contains(x.post_author);

关于C# 如何在循环中组合一些 Linq 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24954505/

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