簡體   English   中英

LINQ - GroupBy 和項目到新類型?

[英]LINQ - GroupBy and project to a new type?

我有一個項目列表,即List<SearchFilter> ,這是SearchFilter object:

public class SearchFilter
{
    public int ItemID { get { return ValueInt("ItemID"); } }
    public string ItemName { get { return ValueString("ItemName"); } }
    public string Type { get { return ValueString("Type"); } }
}

如何按Type分組,並將分組項目投影到新的GroupedFilter列表中,即:

public class Filter
{
    public int ItemID { get; set; }
    public string ItemName { get; set; }
}

public class GroupedFilter
{
    public int Type { get; set; }
    public List<Filter> Filters { get; set; }
}

謝謝。

var result = items.GroupBy(
    sf => sf.Type,
    sf => new Filter() { ItemID = sf.ItemID, ItemName = sf.ItemName },
    (t, f) => new GroupedFilter() { Type = t, Filters = new List<Filter>(f) });

但是您需要確保您的GroupedFilter.Type屬性是一個string以匹配您的SearchFilter.Type屬性。

使用 Linq 查詢語法更長更復雜,但僅供參考:

var grpFilters = (from itm in list group itm by itm.Type into grp select
                    new GroupedFilter
                    {
                        Type = grp.Key,
                        Filters = grp.Select(g => new Filter 
                                                  {
                                                      ItemID = g.ItemID,
                                                      ItemName = g.ItemName
                                                  }).ToList()
                    }).ToList();

有些人可能會發現它更具可讀性,因為他們不知道 GroupBy() 的所有可能參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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