PredicateBuilder.New 对比 PredicateBuilder.True
PredicateBuilder.New vs PredicateBuilder.True
我正在使用 PredicateBuilder 在我的操作中创建一个 search/filter 部分。这是:
[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() is obsolete. Use PredicateBuilder.New instead.
但是我已经尝试过 PredicateBuilder.New<T>
并且我的谓词总是得到 1
的值,即使我没有任何参数值,所以 cty
,并且inumber
为空。这 returns 我一个空的 table.. 当它应该通过输入带有 return View(lstValues.ToPagedList(page ?? 1, 2));
.
的 else
语句返回所有记录时
当我使用 PredicateBuilder.True<T>
时,当所有参数都为空时,我会返回所有记录。
知道这是为什么吗?感谢您的帮助。
var predicate = PredicateBuilder.New<TableName>();
等同于 Expression<Func<TableName, bool>> predicate = item => false;
您想要的是 PredicateBuilder.New<TableName>(true);
将默认行为更改为包含而不是排除。
我正在使用 PredicateBuilder 在我的操作中创建一个 search/filter 部分。这是:
[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() is obsolete. Use PredicateBuilder.New instead.
但是我已经尝试过 PredicateBuilder.New<T>
并且我的谓词总是得到 1
的值,即使我没有任何参数值,所以 cty
,并且inumber
为空。这 returns 我一个空的 table.. 当它应该通过输入带有 return View(lstValues.ToPagedList(page ?? 1, 2));
.
else
语句返回所有记录时
当我使用 PredicateBuilder.True<T>
时,当所有参数都为空时,我会返回所有记录。
知道这是为什么吗?感谢您的帮助。
var predicate = PredicateBuilder.New<TableName>();
等同于 Expression<Func<TableName, bool>> predicate = item => false;
您想要的是 PredicateBuilder.New<TableName>(true);
将默认行为更改为包含而不是排除。