c# - Is there a better way to search a list with another list -


is there better linq query see if list contains item in list following:

results.where(r => r.categories.intersect(submittedcategories).count() > 0) 

where r.categories list of categories result in , submittedcategories list of categories user want filter on

i use enumerable.any instead of enumerable.count:

results.where(r => r.categories.intersect(submittedcategories).any()) 

method count() has optimization sources implement icollection (it returns count property value of collection). result of enumerable.intersect ienumerable<t> in case count() iterate on set:

public static int count<tsource>(this ienumerable<tsource> source) {     if (source == null)             throw error.argumentnull("source");      icollection<tsource> is2 = source icollection<tsource>;     if (is2 != null)             return is2.count;      icollection is3 = source icollection;     if (is3 != null)             return is3.count;      int num = 0;     using (ienumerator<tsource> enumerator = source.getenumerator())     {         while (enumerator.movenext()) // fall case            num++;      }     return num; } 

it means full intersection should built both collections know total count of items in result. , value compared zero.

any() stop iterating after first item found without finding items intersect.

public static bool any<tsource>(this ienumerable<tsource> source) {     if (source == null)             throw error.argumentnull("source");      using (ienumerator<tsource> enumerator = source.getenumerator())     {         if (enumerator.movenext())                     return true;             }     return false; } 

another benefit - any() shows intent better.


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -