LINQ:转换分组列表进入新的名单
问题描述:
起初,我有一个项目清单:LINQ:转换分组列表进入新的名单
List<Item> mySourceList;
哪个项目是:
项目类:
public class Item
{
public DateTime Date
{
get;
set;
}
public string ProviderID
{
get;
set;
}
public List<AnotherClass> listOfitems
{
get;
set;
}
public byte[] Img
{
get;
set;
}
// Other properties
public long GroupID
{
get;
set;
}
}
我需要组mySourceList的ProviderID和日期,所以我做如下:
var grp = mySourceList .GroupBy(e => new { e.ProviderID, e.Date });
然后我在这个分组名单进行一些opertions:
int groupId = 1;
foreach (var group in grp)
{
int id = group.Count() > 1 ? groupId++ : 0;
// Loop through each item within group
foreach (var item in group)
item.GroupID = id;
}
最后,我想mySourceList列表转换成一个新的,新人们必须再次列出,所以我下面想,但它不工作:
List<Item> myDestList = grp.ToList<Item>();
我该如何转换为List?
我使用Visual Studio 2008和.NET框架3.5 SP1
答
使用SelectMany
扩展方法。 grp
是IEnumerable<IGrouping<'a, Item>>
类型 - 所以它是某种列表的列表。
而且你需要所有物品的退货清单。
List<Item> myDestList = grp.SelectMany(g => g).ToList();
另一种方法是使用您的原始列表,因为您的代码更新已经存在的项目。
答
我已经趁着操作中循环更新分组的列表如下进行:
List<Item> groupedList = new List<Item>();
int groupId = 1;
foreach (var group in grp)
{
int id = group.Count() > 1 ? groupId++ : 0;
// Loop through each item within group
foreach (var item in group)
{
item.GroupID = id;
groupedList.add(Item);
}
}
myDestList = groupedList;
法比奥解决方案也适用。
最后我有循环的令牌优势,请参阅我的答案。无论如何,你的解决方案完美工作,我喜欢它。 – user1624552