当前位置:  开发笔记 > 编程语言 > 正文

PredicateBuilder.New vs PredicateBuilder.True

如何解决《PredicateBuilder.NewvsPredicateBuilder.True》经验,为你挑选了1个好方法。

我正在使用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();

        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();我得到了一个绿色的波浪形的说法

PredicateBuilder.True()已过时.请改用PredicateBuilder.New.

但是我已经尝试过PredicateBuilder.New,1即使我没有参数的任何值,我的谓词总是得到一个值,所以cty,并且inumber为空.这会返回一个空表..当它应该通过输入else语句 返回所有记录return View(lstValues.ToPagedList(page ?? 1, 2));.

当我使用时,PredicateBuilder.True我获取所有参数为null时返回的所有记录.

有什么想法吗?任何帮助表示赞赏.



1> Johannes Kom..:

var predicate = PredicateBuilder.New(); 相当于 Expression> predicate = item => false;

您想要的是PredicateBuilder.New(true);将默认行为更改为包括,而不是排除.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有