c# - 最近用户查询

标签 c# .net linq join linq-to-objects

我有 2 个表,例如让我们假设这是数据:

用户表:

 ------------------------------
|   user_id     |   username    |
 ------------------------------
| 1             | danny         |
| 2             | george        |
| 3             | lana          |
| 4             | kim           |
| 5             | tim           |
 ------------------------------

users_logins 表:

     -----------------------------------------------
    | record_id | user_id   |   recorder            |
     -----------------------------------------------
    | 1         | 3         | 2012-11-06 04:18:26   |
    | 2         | 3         | 2012-11-06 04:31:05   |
    | 3         | 2         | 2012-11-06 03:44:22   |
    | 4         | 1         | 2012-11-06 04:18:58   |
    | 5         | 1         | 2012-11-06 04:30:15   |
    | 6         | 3         | 2012-11-06 04:31:05   |   X
    | 7         | 1         | 2012-11-06 05:53:47   |
    | 8         | 1         | 2012-11-06 05:55:15   |   X
    | 9         | 4         | 2012-11-06 05:59:31   |
    | 10        | 4         | 2012-11-06 06:12:55   |   X
     -----------------------------------------------

我想显示 3 个最近登录的用户,所以结果将只显示对他们有 X 标记的行,或者用唯一的最近登录的话。

查询会是什么样子?

最佳答案

对对象的 linq 试试这个

 (from login in users_logins.OrderByDescending(user => user.recorder) 
 from user in users
 where user.user_id == login.user_id
 select user).Distinct().Take(3)

这个查询
1. 首先按日期排序
2. 然后将排序后的登录数据与用户数据连接起来,
3.然后取不同的用户
4. 最后取前3条记录。


以下是替代查询

from login in users_logins.OrderByDescending(user =>user.recorder).GroupBy(user=>user.recorder).SelectMany( users=>users.First()).Take(3) 
from user in users
where user.user_id == login.user_id
select user

这个查询
1. 第一类
2. 然后按 user_id 分组
3. 然后取前3条不同user id的记录,
4.然后加入用户数据。

关于c# - 最近用户查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061201/

相关文章:

c# - 专门针对旧版本的单个 .NET Standard API/命名空间(Entity Framework Core)

c# - 如何忽略 { 字符?

c# - 使用 mysql 和 c# 恢复功能不起作用

C# - 合并集合问题

c# - 我想从列表中找到最接近的较大纸张尺寸

c# - 如何验证 Paypal 付款是否真实 C#

c# - Java 或 C# 中长轮询/Comet 的最佳选择?

c# - 开始使用 Telerik : kendoDropDownList is not a function

c# - 从客户端向服务器发送 lambda 表达式

c# - 尝试编写鼠标单击代码时 PInvoke 签名出错