首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PredicateBuilder.New对PredicateBuilder.True

PredicateBuilder.New对PredicateBuilder.True
EN

Stack Overflow用户
提问于 2017-01-10 20:57:19
回答 1查看 8.5K关注 0票数 16

我使用PredicateBuilder在我的操作中创建一个搜索/筛选部分。下面是:

代码语言:javascript
复制
    [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都是空的。这会给我一张空桌子。当它应该通过输入带有else语句的return View(lstValues.ToPagedList(page ?? 1, 2));返回所有记录时。

当我使用PredicateBuilder.True<T>时,当所有参数都为null时,我会得到返回的所有记录。

知道为什么会这样吗?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-10 21:13:38

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

相反,您想要的是PredicateBuilder.New<TableName>(true);将默认行为更改为包含,而不是排除。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41578273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档