zoukankan      html  css  js  c++  java
  • LINQ动态查询类--[DynamicLinqExpressions]

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Linq.Expressions;
     6 
     7 namespace Test
     8 {
     9     /// <summary>
    10     /// 一個老外寫的擴充Expression方法的靜態類別,可以解決上面冗長的程式碼
    11     /// </summary>
    12     public static class DynamicLinqExpressions//注意static靜態型別
    13     {
    14         public static Expression<Func<T, bool>> True<T>() { return f => true; }
    15         public static Expression<Func<T, bool>> False<T>() { return f => false; }
    16 
    17         //注意this
    18         public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
    19                                                             Expression<Func<T, bool>> expr2)
    20         {
    21             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
    22             return Expression.Lambda<Func<T, bool>>
    23                   (Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
    24         }
    25 
    26         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
    27                                                              Expression<Func<T, bool>> expr2)
    28         {
    29             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
    30             return Expression.Lambda<Func<T, bool>>
    31                   (Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
    32         }
    33     }
    34 }

    使用示例:

    1 SchoolContainer school = new SchoolContainer();
    2             var eps = DynamicLinqExpressions.True<Teacher>();
    3             eps.And(T=>T.Name.Contains("1"));
    4             var ss = school.Teacher.Where(T => T.Name.Contains("PM")).Where(eps);
    5             foreach (var item in ss)
    6             {
    7                 Console.WriteLine(item.Name);
    8             }
  • 相关阅读:
    洛谷P2146 [NOI2015]软件包管理器
    洛谷P3038 [USACO11DEC]牧草种植Grass Planting
    洛谷P2831 愤怒的小鸟
    洛谷P1084 疫情控制
    洛谷P3258 [JLOI]2014松鼠的新家
    洛谷P1084 运输计划
    洛谷P2051 [AHOI2009]中国象棋
    洛谷P1438 无聊的数列
    洛谷P1312 Mayan游戏
    luogu P1038 神经网络
  • 原文地址:https://www.cnblogs.com/lyghost/p/3338393.html
Copyright © 2011-2022 走看看