【问题标题】:how to add an extension method如何添加扩展方法
【发布时间】:2019-07-24 15:11:12
【问题描述】:

首先我在各种控制器方法中调用 getall() 方法,然后使用 linq 查询仅获取活动用户。但我想制作一个通用函数,一次从各种表中获取所有活动属性。所以我只能调用那个特定的“getallwhere”方法。

    public IEnumerable<TEntity> GetAllWhere(TEntity entity)
    {

        return Context.Set<TEntity>().Where(c=>c.isActive == true)
    }



public interface IRepository<TEntity> where TEntity : class
{

    IEnumerable<TEntity> GetAllWhere();


}`

【问题讨论】:

  • 您能否更具体地说明什么不起作用?
  • 我一直不喜欢表达式树,但具体的问题是什么?
  • var category = _categoryRepository.GetAll().Where(c => c.IsActive == true) 但我想要这样的东西:- var category = _categoryRepository.GetAllWhere();
  • 一切正常。问题是首先我得到所有字段,然后应用 where 条件。我想创建一个特定的函数来执行此任务,然后在任何地方调用该函数。
  • 重申一下,我相信您希望将表达式从另一层传递到编译器仍将自动构建的实体上下文。

标签: c# linq asp.net-core repository repository-pattern


【解决方案1】:

您正在寻找以下扩展方法:

public static class RepositoryExtension
{
    public static IEnumerable<TEntity> GetAllWhere(this Repository repository)
    {
        return repository.GetAll().Where(x => x.isActive);
    }
}

要创建扩展方法,您必须声明一个静态类并定义一个以 this 作为第一个参数的静态方法。

然后,您可以像在原始类型中一样使用您的方法。

myRepository.GetAllWhere();

您可以查看文档ExtensionMethods

【讨论】:

  • 是否可以在现有的类中实现这一点(请看我发布的截图)??
  • 扩展方法的美妙之处在于你可以把它放在你的班级旁边,它就像在班级里面一样工作(这就是为什么它被称为扩展)
  • 我不知道扩展方法。现在我会看看它。感谢您的提示
  • 不要挑剔,但为了热爱一切美好而神圣的事物,请将其命名为 GetAllActive。使用像 GetAllWhere 这样的名称只是让下一个继承此代码的开发人员想用铲子打你的好方法。
  • 是的,我只是在回复原始海报规范 :)
猜你喜欢
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多