linq to sql 转到 linq to ef
动态查询条件.需要使用linqkit
使用方法如下
public ActionResult Index(string productName, string manufactory, int[] productTypes) { IQueryable<Product> products = db.Products; // #1# 搜尋條件為 = True AND 產品名稱 AND 生產工廠 var predicate = PredicateBuilder.True<Product>(); // 如果有輸入產品名稱作為搜尋條件時 if (!string.IsNullOrWhiteSpace(productName)) { predicate = predicate.And(p => p.Name.Contains(productName)); } // 如果有輸入生產工廠作為搜尋條件時 if (!string.IsNullOrWhiteSpace(manufactory)) { predicate = predicate.And(p => p.Manufactory.Contains(manufactory)); } // #2# 搜尋條件為 = False OR 產品類型1 OR 產品類型2 ... var predicateProductType = PredicateBuilder.False<Product>(); // 如果有輸入產品類型作為搜尋條件時 if (productTypes!=null) { foreach (var type in productTypes) { predicateProductType = predicateProductType.Or(p => p.ProductTypeId == type); } } // #3# 搜尋條件為 = True AND 產品名稱 AND 生產工廠 AND (False OR 產品類型1 OR 產品類型2 ...) // 回傳搜尋結果 return View(products.AsExpandable().Where(predicate) .Where(predicateProductType).Include(p => p.ProductType)); }
注意:::: 重要的是要在查询之前加上.... .AsExpandable() .这个方法先执行,再执行Where 就不会错了.