![](/img/trans.png)
[英]LINQ PredicateBuilder multiple OR starting with PredicateBuilder.True<>
[英]PredicateBuilder.New vs PredicateBuilder.True
我正在使用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()已過時。 請改用PredicateBuilder.New。
但是我已經嘗試了PredicateBuilder.New<T>
並且我的謂詞總是得到值1
即使我沒有參數的任何值,所以cty
和inumber
是null。 這會返回一個空表..當它應該返回所有記錄時輸入帶有return View(lstValues.ToPagedList(page ?? 1, 2));
的else
語句return View(lstValues.ToPagedList(page ?? 1, 2));
。
當我使用PredicateBuilder.True<T>
我獲取所有參數為null時返回的所有記錄。
有什么想法嗎? 任何幫助表示贊賞。
var predicate = PredicateBuilder.New<TableName>();
等價於Expression<Func<TableName, bool>> predicate = item => false;
你想要的是PredicateBuilder.New<TableName>(true);
更改默認行為以包括,而不是排除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.