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 就不会错了.