2012-02-15 68 views
5

請幫我將此轉換爲Lambda表達式的LINQ to SQL的GroupBy MAX()拉姆達

SELECT [UserID], MAX(Created) Created 
FROM [UserHistory] 
WHERE userid IN (14287) 
GROUP BY [UserID] 

謝謝!編輯: 這是我到目前爲止。

List<T> list; //list is populated 

table.Where(x => list.Select(y => y.ClientId).Contains(x.UserID)) 
        .GroupBy(x => x.UserID) 
        .Select(x => new { x.UserID, x.Created }) 
        .ToList(); 

當我添加GroupBy時,我的Select表示沒有x.UserID和x.Created的定義。

+3

你卡在了什麼? – Krizz 2012-02-15 22:54:38

+0

當我添加組時,我的選擇休息。這個小組是否通過消除所有其他領域或某些東西? – Kukoy 2012-02-15 22:56:37

+1

請記住,在group by之後,您有'IEnumerable >'而不是原來的'IEnumerable ''。下面的人向你展示了這個事實的實際例子。 – Krizz 2012-02-15 23:01:10

回答

11

在這裏你去:

var userIDs = new[] {14287, }; 

var results = 
dataContext.UserHistories 
.Where(user => userIDs.Contains(user.userID)) 
.GroupBy(user => user.userID) 
.Select(
    userGroup => 
     new 
     { 
      UserID = userGroup.Key, 
      Created = userGroup.Max(user => user.Created), 
     }); 
+0

完美,謝謝。 – Kukoy 2012-02-15 23:09:36

0
var query = from history in context.UserHistories 
       where (new[] {14287}).Contains(history.userID) 
       group history by history.UserID into g 
      select new 
      { 
       UserId = g.Key, 
       MaxCreated = g.Max(x => x.Created) 
      }; 
+0

您錯過了'WHERE userid IN(14287)'短語。 – Krizz 2012-02-15 22:58:19

+0

沒錯。謝謝你的提示。 – Meligy 2012-02-15 23:40:38

+0

原帖需要lambda – jgerman 2015-04-10 20:24:25

0

關於你的編輯,我在評論說,在.Select(x => new { x.UserID, x.Created })x不再一個UserHistory,它是IGrouping<int, UserHistory>(1),這不具有UserIDCreated屬性,但只有Key屬性,該屬性是用戶標識並實施IEnumerable來枚舉給定鍵(用戶標識)的所有項目。

使用@DaveShaw片段,因爲它是最正確和最有效的片段。

(1)我假設UserIDint