我正在使用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时返回的所有记录.
有什么想法吗?任何帮助表示赞赏.
var predicate = PredicateBuilder.New
相当于 Expression
您想要的是PredicateBuilder.New
将默认行为更改为包括,而不是排除.