2013-04-26 10 views
9

के साथ मैं अपनी खोज कार्यक्षमता को समायोजित करने के लिए एक उपयुक्त linq क्वेरी बनाने की कोशिश कर रहा हूं।सी # खोज क्वेरी linq

मेरे पास निम्न कॉलम के साथ एक तालिका है: 'firstname' | 'अंतिम नाम' | 'विवरण'। निम्नलिखित डेटा के साथ : 'पीटर' | 'मुलडर' | 'यह एक छोटा सा विवरण है।'

मेरा 'खोज' कीवर्ड कुछ ऐसा हो सकता है: "पीटर" या "थोड़ा विवरण"।

अब अगर मैं लैम्ब्डा में निम्नलिखित LINQ अभिव्यक्ति का उपयोग:

mycontext.persons.Where(t => search.Contains(t.Firstname) || search.Contains(t.Lastname) || search.Contains(t.Description).Select(p => p).ToList(); 

अब मैं अपने परिणाम प्राप्त है, जब मैं 'पीटर' का उपयोग, लेकिन अगर मैं 'पीट' या 'एक छोटे से वर्णन' मैं मिल का उपयोग कोई परिणाम नहीं। मैं अपनी linq अभिव्यक्ति कैसे बना सकता हूं, इसलिए यह मिलान के लिए कॉलम डेटा के माध्यम से खोज सकता है?

+0

आप यहाँ देख सकते हैं: [LINQ साथ छनन संग्रह] (http://stackoverflow.com/questions/1324774/filtering-collection-with-linq) – Tigran

+6

'search.Contains (t.Firstname) 'या' t.Firstname। शामिल है (खोज) '? – I4V

+0

आप जो कर रहे हैं वह '' 'पेटी' या 'थोड़ा विवरण' है। "लिंक में आपके पहले परीक्षण के लिए" (पीटर ") शामिल है, और यह हमेशा झूठी वापसी करेगा। – CodeNaked

उत्तर

25

मुझे लगता है कि आप इसे पीछे की ओर है:।

mycontext.persons 
    .Where(t => 
     t.Firstname.Contains(search) || 
     t.Lastname.Contains(search) || 
     t.Description.Contains(search)) 
    .ToList(); 
+0

यह काम नहीं करेगा। उनकी खोज स्ट्रिंग == '" 'पेटी' या 'थोड़ा विवरण' ''। – CodeNaked

+7

@CodeNaked: कौन कहता है? उन्होंने कहा कि उनकी खोज स्ट्रिंग "पेटी" हो सकती है, या यह "थोड़ा विवरण" हो सकता है। – StriplingWarrior

+0

बस सोच रहा है कि वहां एक लापता ब्रांड्स है। चयन करें? –

3

एक संभावित (लेकिन शायद नहीं सबसे अनुकूलित समाधान) अपने क्षेत्रों में से सभी को एक साथ संलग्न करें और खोज पद पर एक Contains करने के लिए हो सकता है, जैसे कि

var result = persons.Where(q => (q.Description + " " q.FirstName + " " q.LastName) 
        .ToLower() 
        .Contains(searchTerm.ToLower())) 
        .ToList(); 
+1

में ऐसा कुछ ढूंढ रहा था, तो आप किसी प्रकार का डिलीमीटर जोड़ना चाहेंगे, अन्यथा "tionpete" जैसे खोज गलत तरीके से मेल खाएगा। –

+0

@ ErenErsönmez ग्रेट कॉल। –

+0

ओह मेरे भगवान। तुम लोग बहुत सही हो मैंने पीछे की ओर किया था और गलत स्थानों पर घूर रहा था। – codingjoe

0

इस कोड को आजमाएं।

private void SearchData() 
{ Model1Container model = new Model1Container(); 
try 
{ 
var query = model.Scholars.AsQueryable(); 
if(!string.IsNullOrEmpty(this.txtSearch.Text)) 
{ 
// query = query.Where(x=>x.ScholarName.StartsWith(txtSearch.Text)); 
query = (from Schl in model.Scholars 
where Schl.ScholarName.StartsWith(txtSearch.Text) || 
Schl.PhoneRes.StartsWith(txtSearch.Text) || 
Schl.PhoneOff.StartsWith(txtSearch.Text) || 
Schl.Mobile.StartsWith(txtSearch.Text) || 
Schl.Email.StartsWith(txtSearch.Text) 
orderby Schl.ScholarName 
select Schl); 
} 
this.dgvScholarList.DataSource = query.ToList(); 
} 
catch (Exception ex) 
{ 
MessageBox.Show(ex.Message); 
} 
}