0

我试图为我的问题找到答案,但我找不到。我有带有 ID、WorkerID、Function(int) 和 DateTime 的表。每个工人每天都有多条记录。对于所有工人,我每天只需要获得第一条记录。这个查询给出了我想要的结果:

SELECT WorkerID, MIN(DateTime) AS DateTime
FROM Records
GROUP BY WorkerID, LEFT(DateTime, 10)   
ORDER BY WorkerID

但我想选择所有列(ID、WorkerID、Function 和 DateTime)。我怎样才能做到这一点?另外,我需要此查询用于 ASP.NET MVC3 应用程序,因此如果有人可以在 LINQ 中为我编写此查询,并解释如何将该查询转换为 IEnumerable(Record) 或 IQuerible(Record),我将非常感激。先谢谢各位了,希望你们能救救我。

编辑:您的 LINQ 查询有效,但由于使用了很多视图,而不是表,我在性能方面遇到了很多问题。现在我切换到 Table,我想直接在 Table 上进行查询。结构是一样的,只是没有WorkerID,我有ETAG,是一样的。但我现在有问题。上面提到的 SQL 查询在表上给了我大约 50k 的结果,这是正确的,但现在你的 LINQ 查询给我只有 9k,所以出了点问题。这是查询:

from d in Records
group d by new { d.ETAG, Date = d.DateTime.Value.Year + d.DateTime.Value.Month +            d.DateTime.Value.Day } into g
orderby g.Key.ETAG
select g.OrderBy(e => e.DateTime).FirstOrDefault()

拜托,你能帮我解决这个问题吗...

4

1 回答 1

2
from r in Records
group r by new { WorkerId = r.WorkerId, Date = r.DateTime.Value.Date } into g
orderby g.Key.WorkerId
select g.OrderBy(e => e.DateTime).First()

更新:添加orderby子句,g.OrderBy()用于强制选择每天的第一条记录,而不是组中的任意元素。

于 2012-08-30T16:24:44.707 回答