2009-06-26 5 views
2

Je dois trouver une correspondance d'un élément dans une liste IQueryable. J'ai une liste comme suit:Recherche d'un objet dans IList ou IQueryable

IQueryable<EventItem> eventItems = new Queryable<EventItem>(); 
EventItem eventItem1 = new EventItem("Event 1"); 
EventItem eventItem2 = new EventItem("Event 2"); 
eventItems.Add(eventItem1); 
eventItems.Add(eventItem2); 

Je veux maintenant trouver l'événement dans la liste en passant dans un EventItem comme eventItem2. Comment puis-je rechercher et retourner quelque chose comme EventItem found = eventItems.Select (eventItem2);

Cheers,

S

Répondre

2

Linq proviedes une méthode .Lorsque qui vous permet de passer dans une expression lambda pour évaluer l'élément que vous recherchez.

EventItem found = eventItems.Where(e => e == eventItem2).SingleOrDefault(); 

trouvé pourrait être nulle, donc il vous suffit de vérifier que, pour voir si elle a été trouvée dans la requêtable/liste

+0

Vous avez mal orthographié SingleOrDefault. –

+0

vous avez juste attrapé la réponse avant que je l'ai fixée ;-) –

+0

Merci Joel, toujours simple quand vous le voyez –

7

LINQ vous pouvez faire:

EventItem found = eventItems.SingleOrDefault(item => item.Name == "Event 2"); 

En supposant que le nom de l'EventItem est exposé via une propriété Name.

La partie item => [code] est l'endroit où vous fournissez une méthode qui renvoie true/false, pour décider si les éléments correspondent ou non.

+0

Dommage que ce n'était pas accepté, c'était d'abord, plus succint/lisible, plus efficace et épelé correctement sur le premier essai! –

+0

À la votre! Tant que les gens voient la réponse, tout va bien. –