[英]How to filter LINQ query on dynamic columns and dynamic property in C#?
[英]C# Linq dynamic item property
試圖創建一個可重用的函數來跳過完全相同的代碼。 問題是我在哪里進行比賽的關鍵有一個不同的名字。 否則都是一樣的。
這是我到目前為止。 問題在這里: item.ITEMGROUP根據運行此功能的內容而有所不同。
public List<T> FilterGroupIds<T>(List<T> list, string key, string groupids)
{
if (!string.IsNullOrEmpty(groupids))
{
string[] groupidList = groupids.Split(new char[] { ',' });
List<T> grouped = new List<T>();
foreach (string groupidListItem in groupidList)
{
var mylist = list
.Where(item => **item.ITEMGROUP**.Contains(groupidListItem))
.ToList();
grouped.AddRange(mylist);
}
list = grouped;
}
return list;
}
有沒有辦法使用某種動態檢查? 我使用字符串作為“鍵”的示例,它可以是 ITEMGROUP 或其他東西。
var mylist = list.Where(item => item[key].Contains(groupidListItem)).ToList();
我只想通過委托傳遞這部分item => item[key].Contains(groupidListItem)
:
public List<T> FilterGroupIds<T>(List<T> list, string key, string groupids,
Func<T,bool> condition)
{
...
var mylist = list.Where(condition).ToList();
}
with Func<T,bool> condition = item => **item.ITEMGROUP**.Contains(groupidListItem);
. 這樣您就可以重用該函數並根據T
的類型傳遞您需要的過濾器。
此外,您不需要 foreach :
return list.Where(item => groupIdList.Any(g => item.ITEMGROUP.Contains(g))
.ToList();
是相同的
foreach (string groupidListItem in groupidList)
{
var mylist = list
.Where(item => **item.ITEMGROUP**.Contains(groupidListItem))
.ToList();
grouped.AddRange(mylist);
}
list = grouped;
return list;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.