LINQ-GroupBy和项目到一个新的类型

本文关键字:一个 类型 项目 LINQ-GroupBy | 更新日期: 2023-09-27 17:57:36

我有一个项目列表,即List<SearchFilter>,这是SearchFilter对象:

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; }
}

谢谢。

LINQ-GroupBy和项目到一个新的类型

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()的所有可能参数。