C#Groupby Distinct

时间:2010-12-10 19:26:28

标签: c# linq

我有一个数据库表(称为Info),用于存储[Data],[fkID],[UserID],[Timestamp]。 [数据]实际上是多列,但它并不重要。

基本上,用户可以将数据输入到表单中,然后表单会在Info中插入一个新行。

我想要做的是从每个[UserID]中选择特定[fkID]的最新[Data]项目。这可以在LINQ中完成,我只是没想到它。以下是我到目前为止的情况:

var q = (from i in db.Info
        where i.fkID == @paramID
        orderby Timestamp descending
        groupby new {i.UserID})
        .Distinct()

这显然不起作用。它返回正确的UserID,但不返回我真正想要的[Data]部分。

用语言来说,这就是我想要做的事情:

对于具有特定fkID的Info中的每个条目,我想从每个用户中选择最近的行。

我想知道如何在LINQ中执行此操作。

2 个答案:

答案 0 :(得分:3)

您需要选择每个组中的第一行,如下所示:

var q = from i in db.Info
        where i.fkID == @paramID
        group i by i.UserID into g
        select new { 
            UserID = g.Key, 
            Recent = g.OrderByDescending(i => i.Timestamp).First() 
        };

答案 1 :(得分:0)

您应该使用.First()代替.Distinct()