2011-05-25 56 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()。