五中方式分為定制查詢和智能查詢,定制查詢是確定有幾個條件並且每個條件都生效的,智能查詢是不確定條件個數和條件生效個數,具體看代碼
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,不會去讀數據。
