2012-02-15 27 views
5

Proszę mi pomóc przekonwertować to do wyrażenia lambdaLINQ to SQL GroupBy Max() lambda

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

Dzięki!

EDYCJA: Oto, co mam do tej pory.

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(); 

Po dodaniu GroupBy, mój wybór mówi, że nie ma definicji x.UserID i x.Created.

+3

Na czym się utknąłeś? – Krizz

+0

Po dodaniu grupy przez, moje wybrane podziały. Czy grupa eliminuje wszystkie inne pola czy coś takiego? – Kukoy

+1

Pamiętaj, że po 'group by' masz' IEnumerable > 'zamiast oryginalnego' IEnumerable '. Poniżsi faceci pokazują praktyczne przykłady tego faktu. – Krizz

Odpowiedz

11

Proszę bardzo:

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

Idealny, dzięki. – Kukoy

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

Brakowało frazy "WHERE userid IN (14287)". – Krizz

+0

Dobrze. Dzięki za notatkę. – Meligy

+0

Oryginalny post pytany o lambda – jgerman

0

chodzi o edycję, jak powiedziałem w komentarzu, w .Select(x => new { x.UserID, x.Created }), x jest nieUserHistory jest IGrouping<int, UserHistory> (1), które nie mają właściwości UserID i Created, ale tylko Key, która jest identyfikatorem użytkownika i implementuje IEnumerable w celu wyliczenia wszystkich elementów dla danego klucza (identyfikator użytkownika).

Użyj fragmentu @DaveShaw, ponieważ jest on najbardziej poprawny i najbardziej wydajny.

(1) Zakładam, że UserID jest int.