尝试通过创建通用 GET 方法来减少我的代码中的重复。我正在使用 OrmLite 及其 SQLExpressionVisitor 更新...目标是传入一个 lambda。我已经看到了一些其他的帖子,我希望会有所帮助,但到目前为止,还不行......很明显,问题是我如何尝试在 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'类型的变量'x',但它没有定义
这是一个有效但不通用的代码示例....
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();
}
}