• Lambda动态条件查询


    using System;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Collections.Generic;
        public static class PredicateBuilder
        {
            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.OrElse(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.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
            }
            public IList<Memo> GetMemoList(string department, bool includePublic)
            {
                var filterExpression = PredicateBuilder.True<Memo>();
                filterExpression = filterExpression.And(x => x.ID > 0);
    
                if (department != "")
                {
                    filterExpression = filterExpression.And(x => x.Department == department);
                }
    
                if (includePublic)
                {
                    var orExpression = PredicateBuilder.False<Memo>();
                    orExpression = orExpression.Or(x => x.IsPublic == true);
                    filterExpression = filterExpression.Or(orExpression);
                }
    
                return db.Memo.Where(filterExpression.Compile())
                    .OrderByDescending(x => x.IsTop)
                    .ThenByDescending(x => x.ID).ToList();
            }

    Ref:Dynamically Composing Expression Predicates

  • 相关阅读:
    js的几种排序
    js的数组
    js的浅拷贝和深拷贝
    没有jquery的时候,你看看这个
    jquery的offset与position的区别
    js自定义事件
    jquery 的trigger()
    jquery的getjson与jsonp
    160719、Spring + Dubbo + zookeeper (linux) 框架搭建
    160718、jsoup-1.8.1.jar操作html
  • 原文地址:https://www.cnblogs.com/ncore/p/2766582.html
Copyright © 2020-2023  润新知