将过滤器存储在自定义集合中并有条件地执行

时间:2012-02-20 17:05:05

标签: c# .net linq

我有包含对象集合的Cusom集合对象。然后我有两个绑定到这个单个对象的UI元素(网格和图表)。网格显示所有对象,图表显示同一集合的子集。

我希望能够做的是在集合中注册过滤器(Func<>?)并有条件地执行过滤器以创建子集集。

真的不确定如何处理这个问题。任何指针都会非常有用。

2 个答案:

答案 0 :(得分:1)

你可以直接传入Func&lt;&gt;进入Where()静态方法。输出将是一个新的IEnumerable集合,您可以绑定到您的UI元素。您注册的功能必须是Func<ItemInYourCollection, Boolean>类型。

如果您想在使用过滤器和不使用过滤器之间切换,最简单的方法是使用“非过滤”功能:

Func<ItemInYourCollection, Boolean> filter = (a) => true;
if(filtering) filter = registeredFilter;
UI.Data = rawData.Where(filter);

答案 1 :(得分:0)

您可以使用LINQ Where扩展方法或syntax-based query来指示应该在该图表中放置哪些元素。只有当您的集合实现IEnumarable接口时才有可能。

Where扩展方法的示例可能是这样的:

var filteredItem = items.Where(i => i.type == typeYouLookFor)

它使用lambda expression,因此您不必声明任何其他功能。