2016-04-23 5 views
5

की परिभाषा हालत के लिए सामान्य में इस्तेमाल सही Linq अभिव्यक्ति लिखने के लिए कैसे "कहाँ"Linq अभिव्यक्ति IEnumerable <TEntity> जहां

public static class ConStr 
{ 
    public static MySqlConnection Conn() 
    { 
     return new MySqlConnection(ConfigurationManager.ConnectionStrings["DBCN"].ConnectionString); 
    } 

} 

Repositor.cs

private IDbConnection cn; 

public IEnumerable<TEntity> FilterBy(Expression<Func<TEntity, bool>> expression) 
{ 
    using(cn = ConStr.Conn()) 
    { 
     return cn.GetAll<TEntity>(null).Where(expression); <--error does not contain definition of where 
    } 

} 

शामिल नहीं है लेकिन Linq अभिव्यक्ति के साथ इस होगा रन

using (IDbConnection cn = ConStr.Conn()) 
{ 
    var que = cn.GetAll<Cause>(null).Where(x=>x.cause_id == 1);    
    bool dbIE = Utils.IsAny<Cause>(que); 
    if (dbIE == true) 
    { 
     DGRID.DataSource = que; 
    } 
    else 
    { 
     MessageBox.Show("Sorry No Value"); 
    } 
} 
+0

सबसे अधिक संभावना है कि आपका 'GetAll' वापस लौटा रहा है' IENumerable 'जिसमें' अभिव्यक्ति 'के साथ' कहां 'नहीं है, लेकिन 'Func' है। दृष्टिहीन 'अभिव्यक्ति >' और 'Func <...> 'के बीच कोई अंतर नहीं है, यही कारण है कि आपका दूसरा स्निपेट संकलित करता है। –

+0

IENumerable को लागू करने के बजाय आप सभी वस्तुओं को सूची संग्रह में डाल सकते हैं। एक सूची संग्रह IENumerable है इसलिए आपको अपना कार्यान्वयन लिखना नहीं है। – jdweng

+0

@IvanStoev ah मुझे बहुत धन्यवाद, मैं –

उत्तर

4

Whereके लिएमें ओवरलोड नहीं है जो Expression लेता है। का उपयोग Expression के साथ करने के लिए आपको GetAll से IQueryable का परिणाम बदलना होगा। अपने विशेष मामले के लिए आप केवल Expression<Func<TEntity, bool>> expression से Func<TEntity, bool> expression बदल सकते हैं और सब कुछ काम करना चाहिए।

+0

धन्यवाद तो Func अभिव्यक्ति -> IENumerable के लिए है और IQueryable के लिए है -> अभिव्यक्ति > अभिव्यक्ति। –

+1

'IEUumerable 'प्रकार पर' AsQueryable() 'एक्सटेंशन भी है जो आपके' IEUumerable' को' IQueryable' पर रखता है, लेकिन मुझे नहीं पता कि आप इसे उत्पादन में क्यों उपयोग करना चाहते हैं .. अधिकांश समय सरल 'Func' या' action' पर्याप्त होगा और यदि आप 'अभिव्यक्ति' का उपयोग करना चाहते हैं तो आपको यह जानने की आवश्यकता है कि क्यों –