【问题标题】:Generic Query Method通用查询方法
【发布时间】:2013-10-09 19:13:29
【问题描述】:

尝试通过创建通用 GET 方法来减少代码中的重复。我正在使用 OrmLite 及其 SQLExpressionVisitor 更新...目标是传入一个 lambda。我已经看到了一些我希望能有所帮助的其他帖子,但到目前为止,还不行......很明显,问题是我如何尝试在 ev.Where 语句中评估标准,但解决方案却让我无法理解。 ..

提前谢谢... -莱尼

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

【问题讨论】:

  • 您的通用方法中不需要Expression&lt;Func&lt;T, bool&gt;&gt; criteria 而不是Predicate&lt;T&gt; criteria 吗?
  • 感谢 Jehof,让我走上了正轨……

标签: c# generics predicate ormlite-servicestack


【解决方案1】:

您需要使用Expression&lt;Func&lt;T, bool&gt;&gt; 而不是Predicate&lt;T&gt; 作为泛型方法的参数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多