C# 创建不带谓词的IQueryable扩展方法
在搜索了很多地方后,我最终请求你的帮助 问题是:我需要使用IQueryable创建一个过滤器,但没有谓词。例如,假设我有以下课程:C# 创建不带谓词的IQueryable扩展方法,c#,asp.net-mvc,C#,Asp.net Mvc,在搜索了很多地方后,我最终请求你的帮助 问题是:我需要使用IQueryable创建一个过滤器,但没有谓词。例如,假设我有以下课程: public class MyClass: IQueryable { public string P1 {get; set;} public string P2 {get; set;} } 现在,我需要为这个类或任何其他类提供一个过滤器,我可以这样调用它: var ex1 = MyClass.MyFilter<P1>; 在AS
public class MyClass: IQueryable
{
public string P1 {get; set;}
public string P2 {get; set;}
}
现在,我需要为这个类或任何其他类提供一个过滤器,我可以这样调用它:
var ex1 = MyClass.MyFilter<P1>;
在ASP.NET中将属性或类绑定到网格和列时,剑道网格正在使用类似的方法。非常感谢您的任何想法或建议!谢谢大家! IQueryable只是一个数据类型,与其他类型一样,因此您可以创建一个扩展函数来接受和返回该类型的对象
public static class QueryExtensions
{
public IQueryable<MyClass> MyFilter(this IQueryable<MyClass> query, string p1)
{
return query.Where(p => p.SomeProperty == p1);
}
}
我有点不确定你想做什么,但这是否符合以下原则:
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);
}
}
公共类MyClass
{
公共字符串P1{get;set;}
}
公共静态类QueryableExtensions
{
公共静态IQueryable MyFilter(此IQueryable可查询,字符串值),其中T:MyClass
{
返回queryable.Where(arg=>arg.P1==value);
}
}
谢谢你的回答!还有一个问题:有没有办法避免谓词表达式,即使是在函数本身内部?我希望能够在来自EF或nHibernate的DB查询中使用这个过滤器。非常感谢。这很管用,日本佬!非常感谢。还有什么方法可以将SomeProperty也放入变量中呢?要[传入SomeProperty,请使用lambda表达式-您正试图摆脱的谓词(但没有理由真正摆脱它).Hello janhartmann!是的,是附近的东西!我也在尝试去除return语句中的lambda,我正在尝试使用泛型声明,这对每个类都有效。我建议您引入一个接口并使用它而不是MyClass。然后让您的其他类实现接口wh我包含属性。接口或抽象类,随你喜欢。谢谢janhartmann,现在正在研究它。我认为最终状态将是上述两个答案的组合,使用SomeProperty的反射。我建议在所需的类上共享一个抽象类或接口,并放弃反射。
var ex1 = someCollection.MyFilter(P1);
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);
}
}