2012-02-15 31 views
5

favor me ayude a convertir esto a una expresión lambdaLINQ a SQL GroupBy Max() lambda

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

Gracias!

EDITAR: Esto es lo que tengo hasta ahora.

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

Cuando agrego el GroupBy, mi Seleccionar dice que no hay definición para x.UserID y x.Created.

+3

¿Qué estás atrapado? – Krizz

+0

Cuando agrego el grupo por, selecciono los descansos. ¿El grupo elimina todos los otros campos o algo? – Kukoy

+1

Recuerda, después de 'group by' tienes' IEnumerable > 'en lugar de tu' IEnumerable 'original. Los chicos a continuación te muestran ejemplos prácticos del hecho. – Krizz

Respuesta

11

Aquí van:

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

Perfecto, gracias. – 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

Te has perdido la frase 'WHERE userid IN (14287)'. – Krizz

+0

Derecha. Gracias por la nota. – Meligy

+0

La publicación original pidió lambda – jgerman

0

En cuanto a su edición, como dije en el comentario, en .Select(x => new { x.UserID, x.Created }), x es ya no un UserHistory, es IGrouping<int, UserHistory> (1), lo cual NO tienen propiedades UserID y Created, pero solo la propiedad Key, que es una identificación de usuario e implementa IEnumerable para enumerar todos los elementos para la clave dada (identificación de usuario).

Use @DaveShaw snippet porque es el más correcto y el más eficaz.

(1) Supongo UserID es int.