views:

144

answers:

2

Hi All

Linq noob here.

I have IList<Product> ApplicableProducts and a IList<Product> CurrentProducts.

I need to return a new IList<Product> of all CurrentProducts that exist in Applicable products.

I understand I need to be working with .Contains and .Any but getting a little lost.

Any tips appreciated

+2  A: 

Can be done without LINQ. Here:

var identical = applicableProducts.Intersect(currentProducts);

You may also want to supply your own IEqualityComparer.

Anton Gogolev
That is using linq. `Intersect` is defined in the `System.Linq` namespace.
John Gietzen
+3  A: 

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx

var intersection = list1.Intersect(list2);

or

var intersection = list1.Where(i => list2.Contains(i));
John Gietzen
Calling `Intersect` should be faster for large collections. (It uses a hashtable)
SLaks
@SLaks: Yeah, I was going to speculate on that, but I wasn't sure. Thanks.
John Gietzen