我有一个项目列表,即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; }
}
感谢。
答案 0 :(得分:5)
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
属性匹配。
答案 1 :(得分:0)
使用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()的所有可能参数。