gpt4 book ai didi

c# - PredicateBuilder.New 与 PredicateBuilder.True

转载 作者:可可西里 更新时间:2023-11-01 09:07:01 26 4
gpt4 key购买 nike

我正在使用 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() is obsolete. Use PredicateBuilder.New instead.

但我试过了PredicateBuilder.New<T>我的谓词总是得到 1 的值即使我没有任何参数值,所以 cty , 和 inumber为空。这会返回一个空表.. 当它应该通过输入 else 返回所有记录时声明 return View(lstValues.ToPagedList(page ?? 1, 2)); .

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

知道这是为什么吗?感谢您的帮助。

最佳答案

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

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

关于c# - PredicateBuilder.New 与 PredicateBuilder.True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41578273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com