在很多地方搜索后,我最终请求你的帮助。
问题是:我需要使用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中使用了类似的东西。任何想法或建议都非常感谢!谢谢!
答案 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);