2011-06-07 26 views
13

tengo esto:conseguir último elemento con LINQ to SQL

var result = (from t in MyDC 
       where t.UserID == 6 
       orderby t.UpdateTime 
       select t.ID).Last(); 

Básicamente, estoy usando LINQ to SQL y que no es compatible con el operador .Last. Pude recuperar todos los registros del usuario y luego usar linq en los objetos para obtener mi valor, pero me pregunto cómo hacer esto con linq-to-sql y devolver solo un registro.

Gracias por sus sugerencias.

+2

Si está buscando la "actualización más reciente", ¿podría utilizar el operador linq .Max? Podría ser más rápido que ordenar todo el conjunto de registros. Consulte http://msdn.microsoft.com/en-us/library/bb386972.aspx – Rob

+0

@Rob, una cláusula order by no da como resultado "ordenar todo el conjunto de registros". Todavía se evalúa de forma perezosa, por lo que obtener la primera fila de un pedido no costaría más que un "máximo". –

+0

@KirkWoll - Interesante - No lo sabía. – Rob

Respuesta

34

orden justo al descender y utilizar en su lugar .First():

var result = (from t in MyDC 
      where t.UserID == 6 
      orderby t.UpdateTime descending 
      select t.ID).First(); 
2

Si no sabe lo que está ordenando, también se podría utilizar Saltee() y .Tomar() para reducir el número de filas devuelto