使用Dynamic Linq过滤集合

时间:2015-10-06 00:09:23

标签: c# asp.net linq visual-studio

我想使用动态linq匹配对象的属性。在我的例子中,我有一个有两个属性的Turtle类。在未来,我可能会给它更多的属性。我有一个FilterTurtles()方法,它绑定到Turtle类的属性,并且不可扩展。我想使用动态linq使其可扩展。例如,让我们说我希望按名称" Gilly"过滤和颜色"布朗"也许是一个名为" Breed"的未来财产。如何在FilterTurtlesWithLinq()方法中使用动态linq过滤海龟集合?

tasks

1 个答案:

答案 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");