zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    新院址运行统计
    游标使用之四
    游标使用之三
    css基础知识
    javascript基础知识
    [每日一题2020.06.20]BFS
    白嫖一个免费域名并解析到博客园
    [每日一题2020.06.19]leetcode #84 #121 单调栈
    操作系统---文件管理
    [每日一题2020.06.18]leetcode #3 hash_map实现滑动窗口
  • 原文地址:https://www.cnblogs.com/ncore/p/2766582.html
Copyright © 2011-2022 走看看