2012-11-07 5 views
6

का उपयोग करने में सहायता चाहिए मुझे PredicateBuilder का उपयोग करने के बारे में जानने की आवश्यकता है।PredicateBuilder

var predicate = PredicateBuilder.True<employee>(); 

if (!string.IsNullOrEmpty(txtAddress.Text)) 
    predicate = predicate.And(e1 => e1.Address.Contains(txtAddress.Text)); 
if (!string.IsNullOrEmpty(txtEmpId.Text)) 
    predicate = predicate.And(e1 => e1.Id == Convert.ToInt32(txtEmpId.Text)); 
if (!string.IsNullOrEmpty(txtDesc.Text)) 
    predicate = predicate.And(e1 => e1.Desc.Contains(txtDesc.Text)); 
if (!string.IsNullOrEmpty(txtName.Text)) 
    predicate = predicate.And(e1 => e1.Name.Contains(txtName.Text)); 

EmployeeDataContext edb= new EmployeeDataContext(); 
var emp = edb.Employees.Where(predicate); 
grdEmployee.DataSource = emp.ToList(); 
grdEmployee.DataBind(); 

क्या है कि Employee वस्तु, के बीच एक से और कोष्ठक से भी कम समय में अधिक से अधिक: यह कैसे उपयोग करने के लिए के लगभग हर उदाहरण पर, वे कोड के रूप में इस पर प्रदर्शित होंगे? मैंने उस पर अपने दिमाग को रैक किया है। मैं लिंक से SQL इकाइयों का उपयोग कर रहा हूं और जब मैं इसे स्वयं कोशिश करता हूं तो मुझे संकलन त्रुटियां मिलती हैं। मुझे लगता है कि त्रुटियों की तरह कुछ कर रहे हैं:

"करने के लिए एक Linq मेज से नहीं दिया जा सकता ..."

मैं अभी शुरुआत कर रहा हूँ। कृपया यह पूछने के लिए क्षमा करें कि एक स्पष्ट चीज़ क्या हो सकती है। धन्यवाद।

+0

उन '' <...> जेनरिक कहा जाता है, मैं कैसे LINQ उपयोग करने के लिए पता नहीं है लेकिन maby इस मदद करता है: http://msdn.microsoft.com/en-us/library/bb546142.aspx –

उत्तर

2

जैसा कि @MatsRietdijk टिप्पणी अनुभाग में कहा गया है, यह जेनेरिक का उपयोग किया जा रहा है। असल में, जेनेरिक के साथ आप एक विधि बना सकते हैं जो एक प्रकार/वर्ग (इस उदाहरण में "कर्मचारी") पर काम करेगी जो अज्ञात है (हालांकि आप इसे where statement के साथ नियंत्रित कर सकते हैं)।

आप कुछ अन्य प्रकार (उदा customer) के लिए employee प्रकार बदलने के लिए थे, तो lambda expressions में गुण उपलब्ध भी अलग है, जो कुछ गुण सार्वजनिक रूप से संपर्क में आते थे पर आधारित होगा। उदाहरण के लिए:

var predicate = PredicateBuilder.True<customer>(); 

// There is no "CustomerName" property from employee, but there is for customer objects 
if (!string.IsNullOrEmpty(txtName.Text)) 
    predicate = predicate.And(e1 => e1.CustomerName.Contains(txtName.Text)); 
+0

उत्तर के लिए धन्यवाद। मैं उस बिंदु को भूल गया। मैं इसे आजमाऊंगा। इसके अलावा, लिंक के लिए MatsReitdijk धन्यवाद। एक बार फिर धन्यवाद। –