Eylemimde bir arama/filtre bölümü oluşturmak için PredicateBuilder kullanıyorum. İşte burada: bu hat altındaPredicateBuilder.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));
}
}
PredicateBuilder.True<TableName>();
ben squiggly
PredicateBuilder.True() kullanılmıyor söyleyen bir yeşil olsun. Bunun yerine PredicateBuilder.New kullanın.
Ama PredicateBuilder.New<T>
denedim ve herhangi değerler, parametreler için bu kadar cty
geliyor yoksa bile benim yüklem daima 1
değerini alır ve inumber
boş. Bu bana boş bir tabloyu döndürür. return View(lstValues.ToPagedList(page ?? 1, 2));
ile else
ifadesini girerek tüm kayıtları döndürmesi gerektiğinde.
PredicateBuilder.True<T>
'u kullandığımda, tüm parametreler boş olduğunda tüm kayıtların döndürülmesini sağlarım.
Bunun hakkında bir fikriniz var mı? Herhangi bir yardım takdir edilir.
Ahh öyleydi! Neden tanımı göz alamadım ve aşırı yük parametresinin bool defaultExpression olduğunu görmüyorum .. ama teşekkür ederim. –