2009-08-05 7 views
12

Je suis assez nouveau à LINQ.LINQ - écrire une requête avec distinct et orderby

Supposons que j'avais le tableau suivant:

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 

Dans LINQ, comment pourrais-je écrire une requête qui trouve la plus récente et distincte (sur Device ID) ensemble d'incidents? Le résultat que je voudrais est le suivant:

ID DeviceID Time   Info 

3 2  5/4/2009 b 

4 1  5/5/2009 a 

Devez-vous créer un IEqualityComparer pour cela?

Répondre

16

Vous pouvez obtenir les incidents les plus récents pour chaque appareil (ce qui est je l'ai compris votre question) avec:

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

Eh oui, exactement ce que je visais. Merci. –

4
int filterDeviceID = 10; 

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