2013-10-09 5 views
6

Попытка уменьшить повторение в моем коде путем создания общего метода GET. Я использую OrmLite и его обновление SQLExpressionVisitor ... Целью является передача в лямбда. Я видел несколько других сообщений, которые, как я надеялся, помогли бы, но пока нет. Понятно, что проблема заключается в том, как я пытаюсь получить критерии, оцененные в предложении ev.Where, но решение ускользает от меня. ..Общий метод запросов

заранее спасибо ... -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

Разве вы не нуждаетесь в 'Expression > критерий выборки вместо' Predicate Criteria' в вашем родовом методе? – Jehof

+0

Спасибо, Jehof, что поставил меня на правильный путь ... – 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(); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^