Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 使用linq将订单列表转换为分组订单_C#_Linq - Fatal编程技术网

C# 使用linq将订单列表转换为分组订单

C# 使用linq将订单列表转换为分组订单,c#,linq,C#,Linq,我有一个像这样的订单 class Order { IEnumerable<Item> Items { get; set; } } 模型是一个有序的列表 @model IEnumerable<Order> 有了这一点,我想确保所有组都有相同数量的项目,这取决于最大计数,并将“空白”结果添加到计数较低的组中,但我不知道如何进一步处理。要求非常奇怪,不确定用例,但我将通过以下方式实现: var orderedGroups = Model .SelectMany

我有一个像这样的订单

class Order
{
   IEnumerable<Item> Items { get; set; }
}
模型是一个有序的列表

@model IEnumerable<Order>

有了这一点,我想确保所有组都有相同数量的项目,这取决于最大计数,并将“空白”结果添加到计数较低的组中,但我不知道如何进一步处理。

要求非常奇怪,不确定用例,但我将通过以下方式实现:

var orderedGroups = Model
    .SelectMany(order => order.Items)
    .GroupBy(order => order.ItemNo)
    .OrderByDescending(order => order.Count())
    .ToDictionary(order => order.Key, order => order.ToList());
假定
ItemNo
是一个字符串,则
orderedGroup
的类型将为
Dictionary

获取降序排序集合中的最大元素数:

var maxElements = orderedGroups.First().Value.Count; // Max elements collection is at the top

foreach (var x in orderedGroups.Skip(1)) // Skip the processing of first collection, as that has maximum number of elements
        {       
            int yMax = maxElements - x.Value.Count ; // Count of each Item collection

            for (int y = 0; y < yMax; y++)
            {
                x.Value.Add(default(Item)); // Adding `default Item`, replace with any standard value
            }
        }

需求非常奇怪,不确定用例,但我将这样实现它:

var orderedGroups = Model
    .SelectMany(order => order.Items)
    .GroupBy(order => order.ItemNo)
    .OrderByDescending(order => order.Count())
    .ToDictionary(order => order.Key, order => order.ToList());
假定
ItemNo
是一个字符串,则
orderedGroup
的类型将为
Dictionary

获取降序排序集合中的最大元素数:

var maxElements = orderedGroups.First().Value.Count; // Max elements collection is at the top

foreach (var x in orderedGroups.Skip(1)) // Skip the processing of first collection, as that has maximum number of elements
        {       
            int yMax = maxElements - x.Value.Count ; // Count of each Item collection

            for (int y = 0; y < yMax; y++)
            {
                x.Value.Add(default(Item)); // Adding `default Item`, replace with any standard value
            }
        }

您可能在最后缺少一个Select。不确定完全用linq可以做到这一点。如果您知道要使用多少,那么可以使用。其中count=x,但如果不知道,则需要添加一些逻辑。如果您有一个计数为33 22 11的6个组,会发生什么情况?@Zivweisman如果有6个订单,其中少数订单有3个项目,少数订单有2个项目,少数订单有1个项目,那么分组集合在所有订单中都将有3个项目,而一些订单将有一个或两个空白项目。我需要设计一个比较屏幕,其中分组的项目需要进行比较,并且需要显示空白项目,以使html看起来正确。您可能在最后缺少一个Select。不确定您是否可以仅使用linq来完成此操作。如果您知道要使用多少,那么可以使用。其中count=x,但如果不知道,则需要添加一些逻辑。如果您有一个计数为33 22 11的6个组,会发生什么情况?@Zivweisman如果有6个订单,其中少数订单有3个项目,少数订单有2个项目,少数订单有1个项目,那么分组集合在所有订单中都将有3个项目,而一些订单将有一个或两个空白项目。我需要设计一个比较屏幕,其中分组的项目需要进行比较,并需要显示空白项目,以及使html看起来正确。
List<int> testList = new List<int> {1,2,3,4,1,3,5,6,3,6,4,2,1,3,7,7,7,7,7,7,7};

        var orderedGroups = testList.GroupBy(x => x)
                                    .OrderByDescending(x => x.Count())
                                    .ToDictionary(x => x.Key, x => x.ToList());


        var maxElements = orderedGroups.First().Value.Count;


        foreach (var x in orderedGroups.Skip(1))
        {       
            int yMax = maxElements - x.Value.Count;

            for (int y = 0; y < yMax; y++)
            {
                x.Value.Add(0); // Adding default as 0
            }
        }


    orderedGroups.Dump(); // Linqpad print call, replace with console or similar call in the visual studio