2013-10-09 10 views
6

सामान्य जीईटी विधि बनाकर मेरे कोड में पुनरावृत्ति को कम करने की कोशिश कर रहा है। मैं OrmLite और इसके SQLExpressionVisitor अद्यतन का उपयोग कर रहा हूँ ... लक्ष्य लैम्ब्डा में पास करना है। मैंने कुछ अन्य पदों को देखा है जिन्हें मैं आशा करता हूं कि अब तक मदद मिलेगी, कोई नहीं ... यह स्पष्ट है कि समस्या यह है कि मैं कैसे ev में मूल्यांकन मानदंडों का मूल्यांकन करने की कोशिश कर रहा हूं। जहां बयान है, लेकिन समाधान मुझसे बच रहा है। ..जेनेरिक क्वेरी विधि

अग्रिम धन्यवाद ... -Lenny

public IQueryable<T> Get<T>(Predicate<T> criteria) 
{ 
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection()) 
    { 
    SqlExpressionVisitor<T> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<T>(); 
    ev.Where(x => criteria.Invoke(x)) 
    return db.Select(ev).AsQueryable(); 
    } 
} 

इस दायरे से संदर्भित त्रुटि मैं ... चर 'एक्स' प्रकार 'TW.Api.Models.CostCenter' की हो रही है '', लेकिन यह परिभाषित नहीं किया गया है

यहां कोड का एक उदाहरण है जो काम करता है लेकिन सामान्य नहीं है ....

public IQueryable<CostCenter> Get(Identity user) 
{ 
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection()) 
     { 
     SqlExpressionVisitor<CostCenter> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<CostCenter>(); 
     ev.Where(x => x.OrgId == user.OrgId); 
     ev.Where(x => x.VisibilityStockpointId == user.StockpointId);`` 
     return db.Select(ev).AsQueryable(); 
    } 
} 

यह मॉडल मैं ऊपर संदर्भित ...

[Alias("CostCenterDetail")] 
public class CostCenter 
{ 
    public Guid Id { get; set; } 
    public Guid StockpointId { get; set; } 
    public virtual Guid? VisibilityStockpointId { get; set; } 
    public string Description { get; set; } 
    public string Number { get; set; } 
    public string OrgId { get; set; } 
} 
यह सब, यहाँ अंतिम कोड है पढ़ने के लिए

...

public IQueryable<T> Get<T>(Expression<Func<T, bool>> criteria) 
{ 
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection()) 
    { 
     return db.Select(criteria).AsQueryable(); 
    } 
} 
+1

नहीं है आप एक 'अभिव्यक्ति की जरूरत है <समारोह > अपने सामान्य विधि में एक' विधेय criteria' के बजाय criteria'? – Jehof

+0

धन्यवाद जेहोफ, जिसने मुझे सही रास्ते पर रखा ... – Lenny

उत्तर

2

आप के बजाय एक Expression<Func<T, bool>> उपयोग करने की आवश्यकता है आपकी जेनेरिक विधि के लिए पैरामीटर के रूप में Predicate<T> का।

public IQueryable<T> Get<T>(Expression<Func<T, bool>> criteria) { 
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection()) 
    { 
     return db.Select(criteria).AsQueryable(); 
    } 
} 
संबंधित मुद्दे