C# 如何按元素分组将列表拆分为子列表
这是一个类似的问题,但在我的情况下,我不知道有多少项目,我必须在每个列表中 我有一个具有此属性的类“Items”C# 如何按元素分组将列表拆分为子列表,c#,linq,lambda,C#,Linq,Lambda,这是一个类似的问题,但在我的情况下,我不知道有多少项目,我必须在每个列表中 我有一个具有此属性的类“Items” public class Items{ public Id { get; set;} public String ItemA { get; set;} public String ItemB { get; set;} public String ItemC { get; set;} public String ItemD { get; set;
public class Items{
public Id { get; set;}
public String ItemA { get; set;}
public String ItemB { get; set;}
public String ItemC { get; set;}
public String ItemD { get; set;}
public String ItemE { get; set;}
}
// And a List of Items
List<Items> ....
只需使用
GroupBy
并创建一个匿名类,其中包含要分组的属性
var result = yourList.GroupBy(x => new { x.ItemA, x.ItemB })
.Select(grp => grp.ToList())
.ToList();
只需使用
GroupBy
并创建一个匿名类,其中包含要分组的属性
var result = yourList.GroupBy(x => new { x.ItemA, x.ItemB })
.Select(grp => grp.ToList())
.ToList();
使用LINQ简化分组 您可以利用LINQ的内置方法,通过以下方式向group提供匿名对象:
// This will group your rows using the values in ItemA and ItemB
var grouped = input.GroupBy(i => new { i.ItemA, i.ItemB })
.ToList();
这将把您现有的集合分成您正在寻找的三个不同的组,每个组包含一个IEnumerable
,其中包含该组中的每个组
如果需要整数…
如果要实际检索字符串的整数值(因为所有的属性都是当前字符串),可以考虑显式解析它们,或者编写一个方法,将返回的期望值作为整数数组:
public class Items
{
// Omitted for brevity
public int[] ToIntegerArray()
{
return new int[]{
Int32.Parse(Id),
Int32.Parse(ItemA),
Int32.Parse(ItemB),
Int32.Parse(ItemC),
Int32.Parse(ItemD),
Int32.Parse(ItemE)
};
}
}
这将允许您将代码更改为仅输出实际值,而不是项的集合
对象:
// This will group your rows using the values in ItemA and ItemB and map
// each of the inner groupings to an array of integer values
var groupedItems = items.GroupBy(i => new { i.ItemA, i.ItemB })
.Select(g => g.Select(ig => ig.ToIntegerArray()))
.ToList();
示例
您可以。使用LINQ简化分组 您可以利用LINQ的内置方法,通过以下方式向group提供匿名对象:
// This will group your rows using the values in ItemA and ItemB
var grouped = input.GroupBy(i => new { i.ItemA, i.ItemB })
.ToList();
这将把您现有的集合分成您正在寻找的三个不同的组,每个组包含一个IEnumerable
,其中包含该组中的每个组
如果需要整数…
如果要实际检索字符串的整数值(因为所有的属性都是当前字符串),可以考虑显式解析它们,或者编写一个方法,将返回的期望值作为整数数组:
public class Items
{
// Omitted for brevity
public int[] ToIntegerArray()
{
return new int[]{
Int32.Parse(Id),
Int32.Parse(ItemA),
Int32.Parse(ItemB),
Int32.Parse(ItemC),
Int32.Parse(ItemD),
Int32.Parse(ItemE)
};
}
}
这将允许您将代码更改为仅输出实际值,而不是项的集合
对象:
// This will group your rows using the values in ItemA and ItemB and map
// each of the inner groupings to an array of integer values
var groupedItems = items.GroupBy(i => new { i.ItemA, i.ItemB })
.Select(g => g.Select(ig => ig.ToIntegerArray()))
.ToList();
示例
您可以。请发布您用来尝试实现此目的的代码。LINQ有一个名称恰当的方法
GroupBy()
…我的错误是我忘记了grp=>grp.ToList();谢谢,请发布您用来实现此目的的代码。LINQ有一个名称恰当的方法GroupBy()
…我的错误是我忘记了grp=>grp.ToList();谢谢,我忘记了.Select(grp=>grp.ToList())。:)我需要更多的咖啡…谢谢。是的,我忘记了.Select(grp=>grp.ToList())。:)我需要更多的咖啡……谢谢。