2011-05-25 29 views
3

我有一个项目列表,即List<SearchFilter>,这是SearchFilter对象:LINQ - GroupBy和项目到一个新的类型?

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

谢谢。

回答

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财产。

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()。