Linq 多条件查询组合问题
2014-05-27 13:57
375 查看
借助老外写的一个扩展表达式的类,可以把上篇中的代码写得更优雅
这是PredicateBuilder的源文件
下面是使用示例 :
我的代码:
原文地址:http://www.cnblogs.com/yjmyzz/archive/2008/03/25/1122135.html 感谢
http://developer.51cto.com/art/200909/151931.htm 简单解决Linq多条件组合问题
http://blog.csdn.net/zhensoft163/article/details/7408788 Linq to sql 实现多条件的动态查询(方法一)
http://blog.csdn.net/zhensoft163/article/details/7455875 Linq to sql 实现多条件的动态查询(方法二)
这是PredicateBuilder的源文件
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.Or (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.And (expr1.Body, invokedExpr), expr1.Parameters); } }
下面是使用示例 :
List<Product> GetProductsByAND(params string[] keywords) { DBDataContext db = new DBDataContext(Database.ConnectionString); IQueryable<Product> query = db.Products; foreach (string keyword in keywords) { string temp = keyword; query = query.Where(p => p.Description.Contains(temp)); } //翻译后的sql语句: //Select [t0].[ID], [t0].[Name], [t0].[Description] //FROM [dbo].[Product] AS [t0] //Where ([t0].[Description] LIKE '%手机%') AND ([t0].[Description] LIKE '%6111%') return query.ToList(); } List<Product> GetProductsByOR(params string[] keywords) { DBDataContext db = new DBDataContext(Database.ConnectionString); var predicate = PredicateBuilder.False<Product>(); foreach (string keyword in keywords) { string temp = keyword; predicate = predicate.Or(p => p.Description.Contains(temp)); } var query = db.Products.Where(predicate); //翻译后的sql语句: //Select [t0].[ID], [t0].[Name], [t0].[Description] //FROM [dbo].[Product] AS [t0] //Where ([t0].[Description] LIKE '%6111%') OR ([t0].[Description] LIKE '%2350%') return query.ToList(); } void ShowData() { //var _products = GetProductsByOR("6111", "2350"); //Repeater1.DataSource = _products; //Repeater1.DataBind(); var predicate = PredicateBuilder.True<Product>(); string _name = "6111"; if (!string.IsNullOrEmpty(_name)) { predicate = predicate.And(p => p.Name.Contains(_name)); } string _description = "长虹"; if (!string.IsNullOrEmpty(_description)) { predicate = predicate.And(p => p.Description.Contains(_description)); } using (DBDataContext db = new DBDataContext(Database.ConnectionString)) { var _Products = db.Products.Where(predicate); Repeater1.DataSource = _Products; Repeater1.DataBind(); } }
我的代码:
var bproductwhere = PredicateBuilder.True<bstate_view>(); //工厂名称 if (!string.IsNullOrEmpty(strParm[0])) { bproductwhere = bproductwhere.And(p => p.工厂名称 == strParm[0]); } //出库日期 if (!string.IsNullOrEmpty(strParm[1])) { if (string.IsNullOrEmpty(strParm[0])) { bproductwhere = bproductwhere.And(p => p.工厂名称 == context.Server.UrlDecode (context.Request.Cookies["UserLogin"]["ClientName"])); } string[] strDate = strParm[1].Split('-'); bproductwhere = bproductwhere.And(p => Convert.ToDateTime(p.出库日期) >= Convert.ToDateTime(strDate[0]) && Convert.ToDateTime(p.出库日期) < Convert.ToDateTime(strDate[1]).AddDays(1)); } //品番 if (!string.IsNullOrEmpty(strParm[2])) { bproductwhere = bproductwhere.And(p => p.品番 == strParm[2]); }
原文地址:http://www.cnblogs.com/yjmyzz/archive/2008/03/25/1122135.html 感谢
http://developer.51cto.com/art/200909/151931.htm 简单解决Linq多条件组合问题
http://blog.csdn.net/zhensoft163/article/details/7408788 Linq to sql 实现多条件的动态查询(方法一)
http://blog.csdn.net/zhensoft163/article/details/7455875 Linq to sql 实现多条件的动态查询(方法二)
相关文章推荐
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树!
- linq to sql中,如何解决多条件查询问题,答案,用表达式树!
- linq to sql 多条件组合查询
- EF和linq语句查询条件不等于某个参数出现的问题
- linq查询条件参数化--解决实际问题记录
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- [转]LinqToSql的问题 多条件 动态变化查询条件怎样查询
- 多条件动态LINQ 组合查询
- Linq 的多条件组合查询
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- linq to sql 多条件组合查询
- PredicateBuilder类(linq多条件组合查询)
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- 组合条件查询的数据回显问题(下拉菜单回显以及普通文本框回显)
- 多条件动态LINQ 组合查询
- Linq to SQL 多条件动态组合查询(实战篇)
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- 简单解决Linq多条件组合问题<转>
- 从LINQ实例解析LINQ的另类用法,解决多条件组合问题