繁体   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