2017-01-10 9 views
7

मैं अपनी क्रिया में एक खोज/फ़िल्टर अनुभाग बनाने के लिए प्रिडिकेटबिल्डर का उपयोग कर रहा हूं। संदेश यह है:प्रीडिकेटबिल्डर। न्यू बनाम प्रीडिकेटबिल्डर। ट्रू

[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> का उपयोग मैं सभी रिकॉर्ड वापस भेज दिया गया मापदंडों के सभी रिक्त हैं मिलता है।

कोई विचार क्यों है? किसी भी मदद की सराहना की है।

उत्तर

7

var predicate = PredicateBuilder.New<TableName>(); क्या आप के बजाय चाहते डिफ़ॉल्ट व्यवहार को शामिल करने के बजाय बाहर निकालने के बदलने के लिए PredicateBuilder.New<TableName>(true); है Expression<Func<TableName, bool>> predicate = item => false;

के बराबर है।

+0

आह यह था! मुझे नहीं पता कि मैंने परिभाषा को क्यों नहीं देखा और देखा कि ओवरलोड के लिए पैरामीटर 'बूल डिफॉल्ट एक्स्प्रेशन' था .. लेकिन धन्यवाद। –

संबंधित मुद्दे