创建没有谓词的IQueryable扩展方法

时间:2016-04-12 11:19:12

标签: c# asp.net-mvc

在很多地方搜索后,我最终请求你的帮助。

问题是:我需要使用IQueryable创建一个过滤器,但没有谓词。比方说,我有以下课程:

public class MyClass: IQueryable
{
     public string P1 {get; set;}
     public string P2 {get; set;}
}

现在我需要一个针对这个类或任何其他类的过滤器,我可以调用它,例如:

  var ex1 = MyClass.MyFilter<P1>;

而不是

  var ex = someCollection.Where( p => p.SomeProperty == P1 );

当将属性或类绑定到网格和列时,Kendo Grids在ASP.NET中使用了类似的东西。任何想法或建议都非常感谢!谢谢!

2 个答案:

答案 0 :(得分:1)

我对你要做的事情有点不确定,但它是否符合以下几点:

    public class MyClass
    {
        public string P1 { get; set; }
    }

    public static class QueryableExtensions
    {
        public static IQueryable<T> MyFilter<T>(this IQueryable<T> queryable, string value) where T : MyClass
        {
            return queryable.Where(arg => arg.P1 == value);
        } 
    }

答案 1 :(得分:0)

IQueryable只是一种类似于任何其他类型的数据类型,因此您可以创建一个接受并返回该类型对象的扩展函数。

  public static class QueryExtensions
  {
      public IQueryable<MyClass> MyFilter(this IQueryable<MyClass> query, string p1)
      {
          return query.Where(p => p.SomeProperty == p1);
      }
  }

使用它:

  var ex1 = someCollection.MyFilter(P1);