zoukankan      html  css  js  c++  java
  • wcf ria 解决linq表达式拼接动态查询的类PredicateBuilder

    解决linq表达式拼接动态查询的类PredicateBuilder

    在domain service 的客户端调用时使用

    public static class PredicateBuilder
        {
            /// <summary>
            /// 构造函数使用True时:单个AND有效,多个AND有效;单个OR无效,多个OR无效;混合时写在AND后的OR有效
            /// 构造函数使用False时:单个AND无效,多个AND无效;单个OR有效,多个OR有效;混合时写在OR后面的AND有效
            /// </summary>
            public static Expression<Func<T, bool>> True<T>() { return f => true; }
            public static Expression<Func<T, bool>> False<T>() { return f => false; }

            public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
                                                                Expression<Func<T, bool>> expr2)
            {
                var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
                return Expression.Lambda<Func<T, bool>>
                      (Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
            }

            public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
                                                                 Expression<Func<T, bool>> expr2)
            {
                var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
                return Expression.Lambda<Func<T, bool>>
                      (Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
            }

            public static Predicate<T> ConvertToPredicate<T>(this Func<T, bool> func)
            {
                return new Predicate<T>(func);
            }
        }

    项目管家:专注项目管理软件项目管理系统

  • 相关阅读:
    jQuery内核详解与实践读书笔记2:破解jQuery选择器接口1
    jQuery内核详解与实践读书笔记1:原型技术分解2
    jQuery内核详解与实践读书笔记1:原型技术分解1
    MyEclipse常用配置图解
    python3-datetime.date详解(一)
    PYTHON3-LIST.SORT(),SORTED()方法详解。
    为什么要学习?
    sqlserver数据库 Schema
    Nop源码分析三
    Nop源码分析二
  • 原文地址:https://www.cnblogs.com/dotnetxue/p/2138698.html
Copyright © 2011-2022 走看看