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

 醉情YJY_414 发布于 2023-01-01 11:08

我想结合一些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 lstPA = new List() { 2, 3 }; // the numbers can be added or removed

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

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

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

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

我无法从db获得正确的结果(记录).

什么是两个代码块之间的差异以及如何解决这个问题(我必须使用foreach循环)?

1 个回答
  • 我相信你的问题与关闭有关.变量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);
    

    2023-01-01 11:13 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有