首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ在GROUP BY之前使用表的值时出现问题

LINQ在GROUP BY之前使用表的值时出现问题
EN

Stack Overflow用户
提问于 2011-04-01 19:12:21
回答 1查看 149关注 0票数 0

我有以下的GROUP BY:

代码语言:javascript
运行
复制
   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) };

但它不起作用,我想是因为我正在执行group by,所以我不允许在select中使用group by之前使用表中的值。

下面是对象的层次结构。

代码语言:javascript
运行
复制
 Products

   Each product has multiple warehouses

      Each warehouse has multiple locations.

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

当存在多个仓库和多个位置时,查找位置的标准是什么?

我必须搜索每个仓库,依次搜索每个地点...并返回我使用Date == maxDate检测到的最新位置(只有1个)。

但它不会让我选择p中的"Name“。它不在g中,因为g是由"locations”组成的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-01 19:50:31

我认为你想要这样的东西:

代码语言:javascript
运行
复制
var query = from product in products
            let location = (from warehouse in p.Warehouses
                            from location in p.Locations
                            orderby location.Date descending
                            select location).FirstOrDefault()
            select new { Product = product.Name,
                         Location = location };

请注意,如果没有匹配的位置,则Location可能为空。

这里不需要使用let子句,但我认为这将是编写查询的最具可读性的方式。

当然,现在您并不需要对所有位置进行排序。但是LINQ中没有MaxBy,这才是你真正想要的。如果你正在使用LINQ to Objects,你可以编写你自己的MaxBy方法(在MoreLINQ中有一个);在LINQ to SQL等等中,我希望数据库无论如何都能优化查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5512580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档