linq匿名select后,动态添加Or查询表达式
南风 2022-01-25 00:16 130

作为.net开发者应该都曾经或现在或了解过entityframework,它确实给开发者带来的很好的开发效率。在使用lambda表达式构建查询语句时,大家应该也遇到动态Or查询,我们可以采用PredicateBuilder类来实现动态Or查询,但是呢这个前提是指定表的model,例如

 var expressright = PredicateBuilder.False<库表model>();
                    expressright = expressright.Or(p => p.字段.Contains(‘aaa’));

这种就是强指定了model的动态生成。

有时候我们可能会需要匿名的查询,例如查询前提是这样的

var expression=from q in db.XXXXX
select new {a.Name,a.Age};

像这种匿名的查询,如果还是用上面那种方式会出现报错

无法从“System.Ling.Expressions.Expression<System.Func<model,bool>>”转换为“System.Ling.Expressions.Expression<System.Func<<anonymous type:xxxxxxx>,int,bool>>”

解决办法

在PredicateBuilder类中增加以下方法

public static Expression<Func<T, bool>> DynamicTrue<T>(IQueryable<T> ignored)
        {
            return True<T>();
        }
        public static Expression<Func<T, bool>> DynamicFalse<T>(IQueryable<T> ignored)
        {
            return False<T>();
        } 

调用时

var expressright = PredicateBuilder.DynamicFalse(expression);
expressright = expressright.Or(p => p.Name.Contains('xxxx'));

expression=expression.Where(expressright );

搞完收工,继续浪

本网站提供的文章除原创外均转载自其他网站,本网站只为更好的记录及学习技术经验
若网站内转载的文章侵犯了您的版权,请通过 意见反馈 告知本网站,我们会尽快删除相关信息
Copyright©2021-2021 kcBlog博客 版权所有 粤ICP备2021119076号 v1.0.0 栈谷统计