2009-08-05 18 views
12

Soy bastante nuevo en LINQ.LINQ - escribiendo una consulta con distinct y orderby

Supongamos que tenía la siguiente tabla:

Incident 

ID DeviceID Time   Info 

1 1  5/2/2009 d 

2 2  5/3/2009 c 

3 2  5/4/2009 b 

4 1  5/5/2009 a 

En LINQ, ¿cómo podría escribir una consulta que encuentra el conjunto más reciente y distinta (en la ID de dispositivo) de incidentes? El resultado que me gustaría es este:

ID DeviceID Time   Info 

3 2  5/4/2009 b 

4 1  5/5/2009 a 

¿Tienes que crear un IEqualityComparer para hacer esto?

Respuesta

16

, usted puede obtener los incidentes más recientes de cada dispositivo (así es como he entendido su pregunta) con:

var query = 
    incidents.GroupBy(incident => incident.DeviceID) 
      .Select(g => g.OrderByDescending(incident => incident.Time).First()) 
      .OrderBy(i => i.Time); // only add if you need results sorted 
+0

Sí, exactamente lo que iba a. Gracias. –

4
int filterDeviceID = 10; 

var incidents = (from incident in incidentlist 
       where incident.DeviceID == filterDeviceID 
       select incident).Distinct().OrderBy(x => x.Time); 
Cuestiones relacionadas