簡體   English   中英

PredicateBuilder.New vs PredicateBuilder.True

[英]PredicateBuilder.New vs PredicateBuilder.True

我正在使用PredicateBuilder在我的操作中創建搜索/過濾器部分。 這里是:

    [HttpPost]
    public ActionResult Test(int? cty, string inumber, int? page)
    {

        var lstValues =
            db.TableName.Include(x => x.Table1)
                .Include(x => x.Table2)
                .Include(x => x.Table3)
                .ToList();

        var predicate = PredicateBuilder.True<TableName>();

        if (!string.IsNullOrWhiteSpace(inumber))
        {
            predicate = predicate.And(x => x.Inumber == inumber);
        }

        if (!string.IsNullOrWhiteSpace(cty.ToString()))
        {
            predicate = predicate.And(x => x.CtyID == cty);
        }

        if (predicate.Parameters.Count > 0)
        {
            lstValues = db.TableName.AsExpandable().Where(predicate).ToList();
            Session["Paging"] = lstValues;
            ViewBag.Paging = lstValues.ToPagedList(page ?? 1, 2);
            return View(lstValues.ToPagedList(page ?? 1, 2));
        }
        else
        {
            return View(lstValues.ToPagedList(page ?? 1, 2));
        }
    }

在此行下PredicateBuilder.True<TableName>(); 我得到一個綠色的波浪形的說法

PredicateBuilder.True()已過時。 請改用PredicateBuilder.New。

但是我已經嘗試了PredicateBuilder.New<T>並且我的謂詞總是得到值1即使我沒有參數的任何值,所以ctyinumber是null。 這會返回一個空表..當它應該返回所有記錄時輸入帶有return View(lstValues.ToPagedList(page ?? 1, 2));else語句return View(lstValues.ToPagedList(page ?? 1, 2));

當我使用PredicateBuilder.True<T>我獲取所有參數為null時返回的所有記錄。

有什么想法嗎? 任何幫助表示贊賞。

var predicate = PredicateBuilder.New<TableName>(); 等價於Expression<Func<TableName, bool>> predicate = item => false;

你想要的是PredicateBuilder.New<TableName>(true); 更改默認行為以包括,而不是排除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM