Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按元素分组将列表拆分为子列表_C#_Linq_Lambda - Fatal编程技术网

C# 如何按元素分组将列表拆分为子列表

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;

这是一个类似的问题,但在我的情况下,我不知道有多少项目,我必须在每个列表中

我有一个具有此属性的类“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 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())。:)我需要更多的咖啡……谢谢。