【问题标题】:Using LINQ to find the latest item in a collection which in turn has a collection使用 LINQ 查找集合中的最新项目,该集合又具有一个集合
【发布时间】:2011-03-20 08:09:18
【问题描述】:

我有一个产品集合,每个产品都有一个仓库集合,然后在仓库集合内有一个位置集合。

我需要退回所有我做得很好的产品,但我需要退回 locationWithStock,它是仓库集合内的位置集合的成员。

到目前为止我有这个但它是错误的,因为 StockDate 不是 Warehouse 的成员,而是它的集合的成员。我只需要 StockDateS 的最新(最近日期),因此我需要查看每个成员位置中有 1 个的每个 StockDate,只返回最新的。

        var items = from j in products
              let locationWithStock =
                            j.Warehouses.OrderByDescending
                         (a => a.StockDate).FirstOrDefault()
                        select new 
                        {
                            Name = j.Name,
                            Warehouse = locationWithStock.Name
                        }

编辑

我会尝试再解释一下。这是层次结构:

产品。

每个产品都有多个仓库。

每个仓库都有多个位置。

我需要退回所有产品,并且每个产品都必须包含位置名称。

当有多个仓库和多个位置时,找到位置的标准是什么?

我必须搜索每个仓库,然后依次搜索每个位置,并在所有仓库中返回我使用 StockDate 检测到的最新位置(仅 1 个)。

【问题讨论】:

    标签: c# linq linq-to-sql sql-order-by linq-to-objects


    【解决方案1】:

    产品
    每个 product.Warehouses 多个仓库
    每个 Warehouse.Locations 每个仓库中的多个位置。

    我假设无论返回所有我做得很好的产品(在你的问题中)都会转化为产品状态的某些条件,所以我在下面的代码中用 where p.Doing == "Fine" where 子句表示了这个条件,你可以适当修改。

    var stocks =
               from p in products
               from w in p.Warehouses
               from l in w.locations
               group l by l.Date into g
               let maxDate = g.Max(l1 => l1.Date)
               select new { Product=p.Name, Location= g.Where(l2 => l2.Date == maxDate) };
    

    【讨论】:

    • 对不起,也许我没有解释清楚。做得很好...意味着我目前正在退回所有产品而没有问题......与代码无关......
    • 是的,您是正确的产品每个产品。仓库每个仓库有多个仓库。每个仓库中有多个位置。
    • locationWithStock 需要包含 Locations 的最新日期,但请记住每个产品包含多个仓库,每个仓库包含多个位置。日期是位置的成员。
    • 我没有从你的问题中得到过滤条件。
    • 好的,我已经更新了这个问题......希望它现在好一点......它很难解释:-)
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2019-07-12
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多