C# C分组不同

C# C分组不同,c#,linq,C#,Linq,我有一个名为Info的数据库表,它存储[Data]、[fkID]、[UserID]、[Timestamp]。[数据]实际上是多列的,但这并不重要 本质上,用户可以将数据输入表单,表单会在信息中插入新行 我希望能够从每个[UserID]中为特定的[fkID]选择最新的[Data]项。这可以在林克完成,我只是还没弄明白。以下是我到目前为止的情况: var q = (from i in db.Info where i.fkID == @paramID orderby T

我有一个名为Info的数据库表,它存储[Data]、[fkID]、[UserID]、[Timestamp]。[数据]实际上是多列的,但这并不重要

本质上,用户可以将数据输入表单,表单会在信息中插入新行

我希望能够从每个[UserID]中为特定的[fkID]选择最新的[Data]项。这可以在林克完成,我只是还没弄明白。以下是我到目前为止的情况:

var q = (from i in db.Info
        where i.fkID == @paramID
        orderby Timestamp descending
        groupby new {i.UserID})
        .Distinct()
这显然行不通。它返回正确的用户ID,但不是我实际想要的[Data]部分

总之,我想做的是:

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


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

您应该使用.First而不是.Distinct

您应该使用.First而不是.Distinct

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

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() 
        };

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

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() 
        };

这看起来不错。我还没有测试过它,但我认为它是有效的。当我测试它时,我会把你的标记为正确。谢谢。这个看起来不错。我还没有测试过它,但我认为它是有效的。当我测试它时,我会把你的标记为正确。谢谢