2010-11-14 54 views
3

Je retourne IList de la couche Business. Mais dans viewmodel je dois utiliser la fonction Find. Une méthode consiste à convertir IList en liste.Comment ajouter la fonction "Find" à IList

Mais est là de toute façon d'ajouter la méthode « Find » pour IList

+0

il suffit de créer votre propre IFindableList: la mise en œuvre de IList qui inclut la fonctionnalité de recherche. Puisque vous contrôlez votre propre code BL, vous pouvez retourner ce FindableList – cordialgerm

Répondre

6

Eh bien, il y a les méthodes d'extension LINQ .Where (à fecth tout ce match) et .FirstOrDefault (pour aller chercher le premier match) ou vous pouvez écrire votre propre méthode d'extension contre IList comme:

public static class IListExtensions 
{ 
    public static T FindFirst<T>(this IList<T> source, Func<T, bool> condition) 
    { 
     foreach(T item in source) 
      if(condition(item)) 
       return item; 
     return default(T); 
    } 
} 
+0

Si j'ajoute ce fichier à mon projet .cs, Puis-je accéder à IListVar.FindFirst()? – Relativity

+0

Oui, tant qu'IListExtensions est inclus dans la portée, vous pouvez appeler une méthode FindFirst par rapport à tout IList . – scmccart

+0

Quelle est la méthode ToList() dans Linq? .. Puis-je utiliser ce – Relativity

2

Peut-on utiliser la méthode IndexOf?

http://msdn.microsoft.com/en-us/library/3w0148af.aspx

+0

Qu'en est-il de FindAll? – Relativity

+0

Si vous utilisez .net 3.5 ou 5, vous pouvez utiliser l'option .Select et obtenir tous les éléments de l'IList satisfaisant une condition http://msdn.microsoft.com/en-us/library/bb548891.aspx –

+0

de toute façon pour ajouter ces fonctions à IList – Relativity

1

vous pouvez utiliser la méthode Où

list.Where(predicate).First() 
+0

list.First (prédicat) fonctionnera mieux que list.Where (prédicat) .First() comme le deuxième énumérera toute la liste à la recherche de plus d'une occurrence – Gabriel

0

très simple, just you need

étape de coulée

var myModelasList= IListReturnedViewModel as List<ViewModelObject>; 
//now you can use list feaures like Find Func. 
myModelasList.Find((t => t.SomeFiald== currentState && t.IsSomting == somesymbol);