LINQ to SQL group by 和 take
我有一个看起来像这样的表:
Id GroupId Value
它有大约 100 行
如何返回值的前 10 行但没有重复的 GroupId?
I have a table that looks like this:
Id GroupId Value
and it has about 100 rows
How can I return the top 10 rows for value but with no duplicating GroupId?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这将获得完整的行值(它对我来说适用于下面显示的示例数据):
输出:
This one will get the full row values (it's working for me with the sample data I show bellow):
Output:
不确定这是否可以转换为 LINQ-to-SQL,但这是 L2Obj 的一个想法。
用英语来说,它对 GroupId 进行分组,然后从每个组中选择具有最高 Value 的 Foo,对它们进行排序,然后取 10。如果有的话,您可以从 L2SQL 获取对象的具体列表,然后在内存中执行分组,这不应该是性能/内存问题,因为您说只有 100 行。
对于 LINQ-to-SQL,您可能尝试这样的操作。
这是基于 SQL 查询来执行相同的操作,
它基本上执行两个分组。第一个获取每个组的最大值,第二个获取每个组中具有最大值的每条记录的最小 ID(如果一组中的 2 条记录具有相同的值),然后选择前 10 条记录。
Not sure if this translates to LINQ-to-SQL, but here's an idea from L2Obj
In english, it groups on the GroupId and then selects the Foo with the highest Value from each group, orders those, and then takes 10. If anything, you could get a concrete list of your objects from L2SQL and then perform the grouping in memory, should not be a performance/memory issue since you say there are only 100 rows.
For LINQ-to-SQL, you might try something like this
This is based on a SQL query to perform the same operation
It basically performs two groupings. The first gets the max value for each group, the second gets the min ID for each record from each group that has the max value (in case 2 records in a group have the same value), and then selects the top 10 records.
这应该可以做到:
编辑:修改以返回整个对象。
This should do it:
Edit: Modified to return the entire object.