2013-10-09 16 views
6

Genel bir GET yöntemi oluşturarak kodumda yinelemeyi azaltmaya çalışıyorum. OrmLite ve SQLExpressionVisitor güncellemesini kullanıyorum ... Amaç bir lambda geçmek. Yardım edeceğimi umduğum birkaç yazı gördüm ama şu ana kadar, hayır git ... Sorun şu ki, evrendeki ölçütleri değerlendirmeye çalışıyorum, ama çözüm beni terk ediyor. .. Bu kapsamdan başvurulan ben ... değişken 'x' 'TW.Api.Models.CostCenter' türündeki olsun hata öncedenGenel Sorgu Yöntemi

Teşekkür ... 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(); 
    } 
} 

olduğunu '', ancak tanımlanmamış

Burada çalışan, ancak genel olmayan bir kod örneği ....

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(); 
    } 
} 

Bu yukarıda başvurulan modeli ... Bu, burada nihai kodudur okuma herkes için

[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

bir 'İfade ihtiyaç etmiyor musun > criteria' yerine jenerik yönteminde bir' Yüklem criteria' ait? – Jehof

+0

Teşekkürler Jehof, bu beni doğru yola koydu ... – Lenny

cevap

2

yerine bir Expression<Func<T, bool>> kullanmak gerekir ise jenerik yönteminizin bir parametresi olarak Predicate<T>.

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