有一個資料集IEnumerable<T> GridData系結到資料網格。在一種情況下,資料加載T為Dictionary<string, object>. 當用戶在網格上應用過濾器/排序時,我可以得到如下。
filters : [{Property: 'abc', Value: 'aaa'}]
sort: [{Property: 'abc'}]
上Dictionary<string, object> Key代表Property和Value代表Value。
我堅持過濾和排序IEnumerable<T> GridData。誰能告訴我方向?
uj5u.com熱心網友回復:
我會選擇這樣的輔助功能
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))));
}
}
并使用相同的方法進行排序
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/426094.html
