मैं अपनी क्रिया में एक खोज/फ़िल्टर अनुभाग बनाने के लिए प्रिडिकेटबिल्डर का उपयोग कर रहा हूं। संदेश यह है:प्रीडिकेटबिल्डर। न्यू बनाम प्रीडिकेटबिल्डर। ट्रू
[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
अशक्त हैं। यह मुझे एक खाली टेबल देता है .. जब के साथ else
कथन दर्ज करके सभी रिकॉर्ड लौटाया जाना चाहिए।
जब मैं PredicateBuilder.True<T>
का उपयोग मैं सभी रिकॉर्ड वापस भेज दिया गया मापदंडों के सभी रिक्त हैं मिलता है।
कोई विचार क्यों है? किसी भी मदद की सराहना की है।
आह यह था! मुझे नहीं पता कि मैंने परिभाषा को क्यों नहीं देखा और देखा कि ओवरलोड के लिए पैरामीटर 'बूल डिफॉल्ट एक्स्प्रेशन' था .. लेकिन धन्यवाद। –