使用<T> T 作为字典<字符串、对象筛选 IEnumerable 数据集>



有一个数据集作为IEnumerable<T> GridData绑定到数据网格。在一个场景中,T加载的数据作为Dictionary<string, object>。当用户在网格上应用过滤器/排序时,我可以得到如下。

filters : [{Property: 'abc', Value: 'aaa'}]
sort: [{Property: 'abc'}]

Dictionary<string, object>Key上代表PropertyValue代表Value

我坚持对IEnumerable<T> GridData进行过滤和排序.谁能给我指方向?

我会选择这样的辅助函数

private static object GetPropValue(object src, string propName)
{
return src.GetType().GetProperty(propName)?.GetValue(src, null);
}

然后像这样过滤 GridData,假设过滤器是一个数组,您需要检查它上面的所有过滤器。

private static void test<T>(IEnumerable<T> GridData, Dictionary<string, object> filters)
{
IEnumerable<T> result = GridData;
foreach (KeyValuePair<string, object> filter in filters.ToList())
{
result = result.Where(x =>
(x as Dictionary<string, object>).Values.Any(d =>
filter.Value.Equals((T)GetPropValue(d, filter.Key))));
}
}

如果您的过滤器不是字典,只有元组<字符串列表,对象>:

private static void test2<T>(IEnumerable<T> GridData, List<Tuple<string, object>> filters)
{
IEnumerable<T> result = GridData;
foreach (Tuple<string, object> filter in filters.ToList())
{
result = result.Where(x =>
(x as Dictionary<string, object>).Values.Any(d =>
filter.Item2.Equals((T)GetPropValue(d, filter.Item1))));
}
}

并使用相同的方法进行排序

最新更新