linq to ef 动态查询条件

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


详见  http://www.dotblogs.com.tw/wasichris/archive/2014/12/20/147734.aspx


猜你喜欢

转载自blog.csdn.net/phker/article/details/45582677
今日推荐