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

本文关键字:我的 应用于 方法 LINQ 扩展 | 更新日期: 2023-09-27 18:34:30

>我有一个存储库类,作为一种方法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 扩展方法应用于我的类,即使我无法为特定T实现IQueryable<T>

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

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

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