我想使用动态linq匹配对象的属性。在我的例子中,我有一个有两个属性的Turtle类。在未来,我可能会给它更多的属性。我有一个FilterTurtles()方法,它绑定到Turtle类的属性,并且不可扩展。我想使用动态linq使其可扩展。例如,让我们说我希望按名称" Gilly"过滤和颜色"布朗"也许是一个名为" Breed"的未来财产。如何在FilterTurtlesWithLinq()方法中使用动态linq过滤海龟集合?
tasks
答案 0 :(得分:5)
您不需要使用动态Linq,如何使用通用扩展方法来传递任意数量的过滤器,如下所示:
public static IEnumerable<T> Filter<T>(this IEnumerable<T> input,
params Func<T, bool>[] filters)
{
var filtered = input;
foreach(var filter in filters)
{
filtered = filtered.Where(filter);
}
return filtered;
}
你可以像这样使用它:
var filteredTurtles = Turtles.Filter(
t => t.Name == "Gilly",
t => t.Color == "Brown");