簡體   English   中英

C# Linq 動態項目屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM