Попытка уменьшить повторение в моем коде путем создания общего метода 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();
}
}
Разве вы не нуждаетесь в 'Expression> критерий выборки вместо' Predicate Criteria' в вашем родовом методе? –
Jehof
Спасибо, Jehof, что поставил меня на правильный путь ... – Lenny