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


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值