LINQ-GroupBy并投影到新类型?

问题描述

| 我有一个项目列表,即
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\"); } }
}
如何按ѭ3分组,并将分组的项目投影到ѭ4的新列表中,即:
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()的所有可能参数。