使用
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); } }
原文地址:https://www.jb51.cc/csharp/101010.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。