c# - 获取包含所有选定产品的日期

标签 c# linq

我有一个日历应用程序,您可以在其中选择各种产品组合 - 一项服务会根据日历日期范围获取可用日期。仅当所有选定产品在特定日期可用时,该日期才为“可用”。

class SelectedProduct
{
    public int ID { get; set; }
    public int Qty { get; set; }
}

class AvailableInventory
{
    public int ID { get; set; }
    public DateTime Date { get; set; }
}


// List of selected products from user 
List<SelectedProduct> SelectedProducts;

// populated from service with all dates for all products
List<AvailableInventory> AvailableInventory;

我希望能够获取每个日期的可用库存列表,其中包含所选产品中所有 ID 的库存。

这是一个可能的解决方案的(非工作)pusdo 代码,我只是不太了解 linq 不足以使其正确

var results = List<AvailableInventory>(); 

foreach (var group in AvailableInventory.GroupBy(x => x.Date))
{
    if (group.Contains(ALL ID's in SelectedProducts) 
    {
        results.AddRange(group); 
    } 

}

最佳答案

这会按日期对库存进行分组(忽略日期部分),然后仅选择包含所有选定产品 ID 的组,最后选择匹配组的所有可用库存。

var results =
    AvailableInventory.GroupBy(i => i.Date.Date)
                      .Where(g => !SelectedProducts.Select(p => p.ID)
                                                   .Except(g.Select(i => i.ID))
                                                   .Any())
                      .SelectMany(g => g);

结果是 AvailableInventory 的集合。

关于c# - 获取包含所有选定产品的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24520769/

相关文章:

c# - 如何使用 LINQ 从 List<string> 中删除重复组合

c# - 通过linq获取乘法结果

c# - POCO 和多个 ViewModel 指向同一个 POCO?

c# - 这段代码会读取许多按钮鼠标上的鼠标按钮 X 吗?

c# - Linq 搜索不返回所有条目

c# - 制作 C# RegEx 匹配返回意外数据

c# - 在 List<DataRow> 中搜索?

c# - 在一个 LINQ 查询中获取两列的总和

c# - 如何在另一个类中传递不同的类对象并期望它们得到类似的对待?

c# - Linq:如何从集合中查询项目直到总和达到某个值