我有一个数据库表(称为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中执行此操作。
答案 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()