2011-09-03 123 views
0

我有以下信息LINQ查询问题

日期,名称列表,以及一些统计

名称可以重复,但他们不一定。

所以比如我可能有

5,今天, “约翰”
4,今天, “金”
3,今天, “彼得”
2,昨日, “金”
1,昨天,“添”

我想要一个查询,检索每个用户的最新记录。在我的例子中,这将是记录5,4和1.

我是否必须将每条记录与整个数据库进行匹配才能找出?
什么是最好的表现查询来实现这一目标?

+0

您的意思是古老的,而不是最新的?为什么你想要2而不是4如果最新意味着最新?在SQL中,你问的看起来像用户名分组,并有Id =分钟... –

+0

哎呀,我在上次编辑切换列表上的数字,忘了改变这一点。 – bevacqua

+0

你只有在LINQ或SQL中有问题,你能告诉我们哪个SQL查询给你预期的结果吗? –

回答

3

也许这样的事情可以工作?

var linq = people.GroupBy(a => a.Name).Select(a => a.OrderBy(a => a.Date).Last()); 

加长版:

var linq = from person in people 
      group person by person.Name into grouped 
      select grouped.OrderBy(a => a.Date).Last(); 
+0

我认为它应该按日期排序。 – vorrtex

+0

现在我认为这是正确的。 –

+1

还有一个问题:它不适用于实体框架。最后一行必须是'grouped.OrderByDescending(a => a.Date).FirstOrDefault()'。但在这种情况下,它会通过'outer apply'生成奇怪的sql查询:http://pastebin.com/q1TMbtty – vorrtex

0

这里就是我想:

from u in context.Users 
group u by u.UserID into grouped 
select grouped.OrderByDescending(g => g.Date).First()