LINQ:将分组列表转换为新列表
LINQ: Converting grouped list into new list
最初我有一个项目列表:
List<Item> mySourceList;
哪个项目是:
项目Class:
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;
}
}
我需要按 ProviderID 和 Date 对 mySourceList 进行分组,所以我在下面做了:
var grp = mySourceList .GroupBy(e => new { e.ProviderID, e.Date });
然后我在这个分组列表中执行一些操作:
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,所以我在下面尝试但它不起作用:
List<Item> myDestList = grp.ToList<Item>();
如何转换为列表?
我正在使用 Visual Studio 2008 和 NET Framework 3.5 SP1
使用SelectMany
扩展方法。
grp
属于 IEnumerable<IGrouping<'a, Item>>
类型 - 所以它是某种列表列表。
您需要 return 所有项目的扁平化列表。
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;
Fabio 解决方案也有效。
最初我有一个项目列表:
List<Item> mySourceList;
哪个项目是:
项目Class:
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;
}
}
我需要按 ProviderID 和 Date 对 mySourceList 进行分组,所以我在下面做了:
var grp = mySourceList .GroupBy(e => new { e.ProviderID, e.Date });
然后我在这个分组列表中执行一些操作:
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,所以我在下面尝试但它不起作用:
List<Item> myDestList = grp.ToList<Item>();
如何转换为列表?
我正在使用 Visual Studio 2008 和 NET Framework 3.5 SP1
使用SelectMany
扩展方法。
grp
属于 IEnumerable<IGrouping<'a, Item>>
类型 - 所以它是某种列表列表。
您需要 return 所有项目的扁平化列表。
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;
Fabio 解决方案也有效。