在分组的列表中查找丢失的项目

时间:2019-05-29 11:21:34

标签: c# list linq collections

我有一个对象列表dailySchedule,具有属性Order,District和其他属性。

public class dailySchedule
{
        public int Order { get; set; }
        public string Title { get;  }
        public string District { get;  }
        ....
}

列表已加载这些值

enter image description here

每个区必须有6个订单,

var ordersValue = new List<int> {1, 2, 3, 4, 5, 6};

我想为每个地区查找缺少哪个顺序。

结果必须是 0区订单{2,3,5,6} 第12区的订单{5,6}

如何使用linq c#做到这一点?

2 个答案:

答案 0 :(得分:3)

Except()是这种情况:

您可以通过“减去两个列表” 来达到所需的结果,

var required = new List<int>() {1, 2, 3, 4, 5, 6};

var groupedByDistrict = orders.GroupBy(x => x.District);
foreach (var group in groupedByDistrict)
{
    var missing = required.Except(group.Select(x => x.Order).Distinct());

    // Do something with that informaton here
}

这仅仅是无法正常工作的伪代码,可以使您步入正轨  实际上它可能有效,但我尚未对其进行测试。

答案 1 :(得分:1)

尝试下面的代码,它将为您提供每个地区及其缺失订单的结果

        var allOrders = new List<int>() { 1, 2, 3, 4, 5, 6 };
        var result = orders.GroupBy(gp => gp.District).Select(sl =>
            new { District = sl.Key, Order = allOrders.Where(wh => sl.All(all => all.Order != wh)) });