c# - 我如何使用 Linq/Linq to Sql 来执行此操作?

标签 c# .net linq linq-to-sql linq-to-entities

我有一个审计表,我正在尝试使用 Linq 来弄清楚如何获取所有人最近的审计操作。我只是不确定如何。

示例架构

审计表(技术上它实际上是一个 View )

AuditId   UserName   Action    CreatedOn
1         Bob        Action1   2000-01-01
2         Bob        Action2   2000-01-02
3         Bob        Action8   2000-01-03
4         Jane       Action1   2000-01-01
5         Bob        Action1   2000-01-05
6         Jane       Action3   2000-01-05
7         Andrew     Action4   2000-01-05
8         Siena      Action1   2000-01-06
9         Sarah      Action1   2000-01-07
10        Harry      Action6   2000-01-09

所以,对于结果,我会在......

5, Bob, Action1, 2000-01-05
6, Jane, Action3, 2000-01-05
7, Andrew, Action4, 2000-01-05
8, Siena, Action1, 2000-01-06
9, Sarah, Action1, 2000-01-07
10, Harry, Action6, 2000-01-09

有人可以帮忙吗?

(哦,如果我需要索引某些东西,请建议哪一列)。

谢谢:)

最佳答案

我认为它看起来像这样:

var query = from action in db.Actions
            orderby action.CreatedOn descending
            group action by action.UserName into groupedActions
            let mostRecent = groupedActions.First()
            select new { UserName = groupedActions.Key,
                         LatestId = mostRecent.AuditId,
                         LatestAction = mostRecent.Action,
                         LatestDate = mostRecent.CreatedOn };

如评论中所述,这适用于 LINQ to Objects,但分组可能不会保留 SQL 中的顺序。此外,“最新”记录可能会为您提供所需的一切。这是解决这两点的另一个查询:

var query = from action in db.Actions
            group action by action.UserName into groupedActions
            select groupedActions.OrderByDescending(a => a.CreatedOn).First();

为 CreatedOn 和 UserName 添加索引。

关于c# - 我如何使用 Linq/Linq to Sql 来执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2278999/

相关文章:

c# - 如何使用 linq 填充嵌套列表类

.net - 用于生成 .net 代理的优秀库

c# - 如果三个参数中只有一个或两个为真,则返回 True 的代码

c# - 标记 Enum 和具有重叠含义的互斥 Enum

c# - Linq to XML 选择每个具有特定属性的后代的后代

asp.net-mvc - 当使用许多 1 :Many or Many:Many tables? 时,存储库是什么样的

c# - 如何处理 SQL 中随机字符串键的主键存在?

c# - 索引方法 'Class.Method' 错误无法将参数 'log' 绑定(bind)到类型 TraceWriter

c# - 您将如何在 Java 或 C# 中编写高效的循环缓冲区?

c# - 当模棱两可地使用 IEnumerable 时,Linq 函数会给出奇怪的编译错误 - 可能的解决方法?