Tôi đang sử dụng PredicateBuilder để tạo phần tìm kiếm/bộ lọc trong hành động của mình. Ở đây là:PredicateBuilder.New vs PredicateBuilder.True
[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));
}
}
Dưới dòng này PredicateBuilder.True<TableName>();
tôi nhận được một màu xanh lá cây nguệch ngoạc nói
PredicateBuilder.True() là lỗi thời. Sử dụng PredicateBuilder.New thay thế.
Nhưng tôi đã cố gắng PredicateBuilder.New<T>
và vị ngữ của tôi luôn luôn nhận được một giá trị của 1
ngay cả khi tôi không có bất kỳ giá trị sắp tới trong các thông số, vì vậy cty
, và inumber
là null. Điều này trả về cho tôi một bảng trống .. khi nó phải trả về tất cả các bản ghi bằng cách nhập câu lệnh else
với return View(lstValues.ToPagedList(page ?? 1, 2));
.
Khi tôi sử dụng PredicateBuilder.True<T>
Tôi nhận được tất cả hồ sơ được trả về khi tất cả các tham số đều rỗng.
Bất kỳ ý tưởng nào về lý do đó là gì? Bất kỳ trợ giúp được đánh giá cao.
Ahh! Tôi không biết tại sao tôi không nhìn trộm định nghĩa và thấy rằng tham số cho quá tải là 'bool defaultExpression' .. nhưng cảm ơn bạn. –