6

ジェネリック GET メソッドを作成して、コードの繰り返しを減らそうとしています。OrmLite とその SQLExpressionVisitor の更新を使用しています...目標は、ラムダを渡すことです。私が助けてくれることを望んでいた他のいくつかの投稿を見てきましたが、これまでのところ、行きません... 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();
    }
}
4

1 に答える 1

2

ジェネリック メソッドExpression<Func<T, bool>>には as パラメーターの代わりにを使用する必要があります。Predicate<T>

public IQueryable<T> Get<T>(Expression<Func<T, bool>> criteria) {
    using (IDbConnection db = dbConnectionFactory.OpenDbConnection())
    {
        return db.Select(criteria).AsQueryable();
    }
}
于 2013-10-09T19:52:37.673 に答える