五中方式分为定制查询和智能查询,定制查询是确定有几个条件并且每个条件都生效的,智能查询是不确定条件个数和条件生效个数,具体看代码
1 IList<BMS_USERS> list = entities.BMS_USERS.ToList<BMS_USERS>(); 2 3 BMS_USERS user = new BMS_USERS(); 4 5 #region MVC+EF多条件查询解决办法1 适用于智能查询(不确定根据什么条件查询) 6 ////应用LINQKit.dll插件,适用于智能查询(不确定根据什么条件查询) 7 //var builder = PredicateBuilder.True<BMS_USERS>(); 8 //if (!string.IsNullOrEmpty(user.UNAME)) 9 // builder = builder.And(m => m.UNAME == user.UNAME); 10 //if (!string.IsNullOrEmpty(user.UPWD)) 11 // builder = builder.And(m => m.UPWD == user.UPWD); 12 #endregion 13 14 #region MVC+EF多条件查询解决办法2 适用于定制查询(确定根据什么条件查询) 15 ////适用于定制查询(确定根据什么条件查询) 16 //IList<BMS_USERS> list2 = entities.BMS_USERS.Where(m => m.UNAME == "123" && m.UPWD == "456").ToList<BMS_USERS>(); 17 #endregion 18 19 #region MVC+EF多条件查询解决办法3 适用于定制查询(确定根据什么条件查询) 20 ////Linq语句查询,适用于定制查询(确定根据什么条件查询) 21 //IList<BMS_USERS> list3 = (from a in list 22 // where a.UNAME == "123" && a.UPWD == "456" 23 // orderby a.UID descending 24 // select a).ToList<BMS_USERS>(); 25 #endregion 26 27 #region MVC+EF多条件查询解决办法4 适用于定制查询(确定根据什么条件查询) 28 ////Linq 适用于定制查询(确定根据什么条件查询) 29 //IList<BMS_USERS> list4 = (from a in list 30 // where a.UNAME == "123" 31 // where a.UPWD == "456" 32 // orderby a.UID descending 33 // select a).ToList<BMS_USERS>(); 34 #endregion 35 36 #region MVC+EF多条件查询解决办法5 适用于智能查询(不确定根据什么条件查询) 37 ////适用于智能查询(不确定根据什么条件查询) 38 //var query = from a in entities.BMS_USERS select a; 39 //if (!string.IsNullOrEmpty(user.UNAME)) 40 // query = query.Where(d => d.UNAME == "123"); 41 //if (!string.IsNullOrEmpty(user.UPWD)) 42 // query = query.Where(d => d.UPWD == "456"); 43 //IList<BMS_USERS> list5 = query.ToList(); 44 #endregion
第一种智能查询用了一个LINQKit.dll封装库,它提供了一个动态添加条件的PredicateBuilder方法,当然它的功能是非常强大的,不止这一个用途,以后楼主会详解的。
第二、三、四种定制查询用了lambda或者linq语句,当然,他两个是哥们,这两种方式只适合提前知道几种查询条件的。
第五种智能查询是拼接的lamdba表达式,简单实用。有人会问了,在赋值var query的时候会不会把数据提前全部取出,然而并不会,linq只有在ToList()的时候才会去度数据,前面的判断语句只会拼接lambda,不会去读数据。