使LINQ扩展方法适用于我的类

时间:2013-10-09 13:37:43

标签: c# linq extension-methods

我有一个Repository类,它的方法FromStore<TEntity>如下:

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


我能否以某种方式获取linq扩展方法以应用于我的类,即使我无法为特定IQueryable<T>实现T

1 个答案:

答案 0 :(得分:0)

您可以将其实现为存储库接口的扩展方法。

public static class RepositoryExtensions
{
    public static TEntity SingleOrDefault<TEntity>(
        this IRepository repository,
        Expression<Func<TEntity, bool>> filter
    )
    {
        return repository.FromStore<TEntity>().SingleOrDefault(filter);
    }
}