2012-12-27 41 views
4

我有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的行,或者用最近登錄的唯一字顯示。

查詢將如何?

回答

0

我認爲這是你想要的。

var resentLogedInUsers = 
    users 
     .Join(
      users_logins, 
      u => u.user_id, 
      l => l.user_id, 
      (u, l) => new 
          { 
           User = u, 
           Login = l.recorder 
          }) 
     .GroupBy(j => j.User) 
     .Select(l => new {User = l.Key, LastLogin = l.Max(d => d.Login)}) 
     .OrderByDescending(r => r.LastLogin) 
     .Take(3); 
4

嘗試此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條記錄與不同的用戶ID,
4.然後加入用戶數據。