相关文章推荐
面冷心慈的大海  ·  华尔街见闻·  4 月前    · 
宽容的野马  ·  jose.JWKRSA.key.genera ...·  5 月前    · 
胆小的签字笔  ·  spring - Parameter ...·  1 年前    · 
首页 > 软件编程 > C#教程 > C#条件拼接Expression<Func<T, bool>>

C#条件拼接Expression<Func<T, bool>>的使用

作者:风,停下

本文主要介绍了C#条件拼接Expression<Func<T, bool>>的使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

特别注意 :拼接条件时,所使用到的条件strID,strBir必须是独立的

var predicate = PredicateBuilder.GetTrue<Student>();
predicate = predicate.And(it => it.id.ToString().Contains(strID));
predicate = predicate.And(it => it.Birthday.ToString().Contains(strBir));
predicate = predicate.And(it => it.Sex.ToString().Contains(strSex));
predicate = predicate.And(it => it.Age == 20);
var lst = db.Queryable<Student>.Where(predicate).ToList();
using System;
using System.Linq.Expressions;
namespace WindowsFormsApp1.Tools
    public static class PredicateBuilder
        public static Expression<Func<T, bool>> GetTrue<T>() { return f => true; }
        public static Expression<Func<T, bool>> GetFalse<T>() { return f => false; }
        public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
            return first.AndAlso<T>(second, Expression.AndAlso);
        public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> first, Expression<Func<T, bool>> second)
            return first.AndAlso<T>(second, Expression.OrElse);
        private static Expression<Func<T, bool>> AndAlso<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2, Func<Expression, Expression, BinaryExpression> func)
            var parameter = Expression.Parameter(typeof(T));
            var leftVisitor = new ReplaceExpressionVisitor(expr1.Parameters[0], parameter);
            var left = leftVisitor.Visit(expr1.Body);
            var rightVisitor = new ReplaceExpressionVisitor(expr2.Parameters[0], parameter);
            var right = rightVisitor.Visit(expr2.Body);
            return Expression.Lambda<Func<T, bool>>(
                func(left, right), parameter);
        private class ReplaceExpressionVisitor : ExpressionVisitor
            private readonly Expression _oldValue;
            private readonly Expression _newValue;
            public ReplaceExpressionVisitor(Expression oldValue, Expression newValue)
                _oldValue = oldValue;
                _newValue = newValue;
            public override Expression Visit(Expression node)
                if (node == _oldValue)
                    return _newValue;
                return base.Visit(node);

到此这篇关于C#条件拼接Expression<Func<T, bool>>的使用的文章就介绍到这了,更多相关C#条件拼接Expression<Func<T, bool>>内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • C#程序加密工具.Net Reactor详细教程
    C#程序加密工具.Net Reactor详细教程
    2022-02-02
  • C#用websocket实现简易聊天功能(客户端)
    C#用websocket实现简易聊天功能(客户端)
    2022-02-02
  • C#多线程系列之进程同步Mutex类
    C#多线程系列之进程同步Mutex类
    2022-02-02
  • C#中Task.ContinueWith连续任务使用实例
    C#中Task.ContinueWith连续任务使用实例
    2022-02-02
  • C#使用NPOI将List数据导出到Excel文档
    C#使用NPOI将List数据导出到Excel文档
    2022-02-02
  • C#条件拼接Expression<Func<T, bool>>的使用
    C#条件拼接Expression<Func<T, bool>>的使
    2022-02-02
  • C#实现图书管理系统
    C#实现图书管理系统
    2022-02-02
  • C#关于Func和Action委托的介绍详解
    C#关于Func和Action委托的介绍详解
    2022-02-02
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号