加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Linq to objects Predicate Builder

发布时间:2020-12-15 08:10:50 所属栏目:百科 来源:网络整理
导读:使用 linq到对象(不是 linq到sql)进行条件查询的最佳方法是什么. 目前我正在使用http://www.albahari.com/nutshell/predicatebuilder.aspx中的Predicate构建器 并将已编译的谓词传递给IEnumerable.Where,它似乎运行良好. 我要解决的示例代码: 我有这个 stri
使用 linq到对象(不是 linq到sql)进行条件查询的最佳方法是什么.

目前我正在使用http://www.albahari.com/nutshell/predicatebuilder.aspx中的Predicate构建器
并将已编译的谓词传递给IEnumerable.Where,它似乎运行良好.

我要解决的示例代码:

我有这个

string keyword1 = "Test1";
 string keyword2 = "Test3";

        IEnumerable<TestObject> tests = new List<TestObject>()
                                     {
                                         new TestObject() {Name1 = "Test1",Name2 = "Test1"},new TestObject() {Name1 = "Test2",Name2 = "Test2"},new TestObject() {Name1 = "Test3",Name2 = "Test3"},};

        if (!String.IsNullOrEmpty(keyword1) && String.IsNullOrEmpty(keyword2))
            tests = tests.Where(e => e.Name1.Contains(keyword1));
        else if (!String.IsNullOrEmpty(keyword2) && !String.IsNullOrEmpty(keyword1))
            tests = tests.Where(e => e.Name2.Contains(keyword2) || e.Name1.Contains(keyword1));

        return tests.ToList();

解决方法

只需将PredicateBuilder更改为使用委托而不是表达式树,并使用lambdas构建结果:
public static class DelegatePredicateBuilder
{
  public static Func<T,bool> True<T>()  { return f => true;  }
  public static Func<T,bool> False<T>() { return f => false; }

  public static Func<T,bool> Or<T>(this Func<T,bool> expr1,Func<T,bool> expr2)
  {
      return t => expr1(t) || expr2(t);
  }

  public static Func<T,bool> And<T>(this Func<T,bool> expr2)
  {
      return t => expr1(t) && expr2(t);
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读