The funkiness that is LINQ.Contains
Ok, I'm running into brick walls.
I'm trying to do this:
from p in Products
join i in new[] {1,2,3}
on p.Id equals i
select p
I get
NotSupportedException
Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator.
I try again with this:
from p in Products
where ( new[] {1,2,3}).Contains (p.Id )
select p
Woot got some data back in LinqPad.
Tried this in actual code...
IList<int> ids = new List<int>(new[] {1, 2, 3});
IQueryable<Product> product =
from p in Products
where ids.Contains(p.Id)
select p;
I get
Method 'Boolean Contains(Int32)' has no supported translation to SQL.
But it just worked in LinqPad...
Try again:
IEnumerable<int> ids = new int[] {1, 2, 3};
IQueryable<Product> product =
from p in Products
where ids.Contains(p.Id)
select p;
Bingo.
So summary:
In LINQ, IEnumerable.Contains is only implemented for the IEnumerable interface and not the IList interface. Seems obvious now in hindsight.