4

FromStore<TEntity>以下のようなメソッドとして、Repository クラスがあります。

IQueryable<TEntity> FromStore<TEntity>() where TEntity : class;

これを使用して、次のようなことができます。

MyRepository.FromStore<DatabaseModel>().SingleOrDefault(dm => dm.Id = Id);

さて、SingleOrDefault メソッドを直接提供できるときに、クラスのユーザーに呼び出しを行うのはばかげていると思いFromStoreます (通常のように推論されるのではなく、ジェネリック型パラメーターを指定するだけで済みます)。

というわけで、以下のようにメソッドを書きました。

public TEntity SingleOrDefault<TEntity>(Expression<Func<TEntity, bool>> filter) where TEntity : class
{
    return FromStore<TEntity>().SingleOrDefault(filter);
}

すごい!今、私はこれを行うことができます:

MyRepository.SingleOrDefault<DatabaseModel>(dm => dm.Id = Id);

ただし、すべての linq 拡張メソッドに対して同じことを行いたいと考えています。
現在考えられる唯一の方法は、すべての単一のlinqメソッドに対して、クラスに同様のラッパーメソッドを作成することです。

これはばかげているように思えますが、確かにもっと良い方法がありますか?

私はどういうわけか私Repositoryのクラスにlinq拡張メソッドが拡張するクラスを継承させることができると考えていましたが、それらは拡張しIQueriable<T>ます. Tリポジトリには1 つしかないため、私のクラスはそれを実装していません。


特定IQueryable<T>T.

4

1 に答える 1