OData "where ID in list" query
With OData 4.01, in
statement is supported like this:
http://host/service/Products?$filter=Name in ('Milk', 'Cheese')
See accepted answer, everything below is for OData v < 4.01
try this one
var ids = new [] { 100, 200, 300 } ;
var res = from m in provider.Media
from id in ids
where m.media_id == id
select m;
there is a comprehensive description on msdn on querying DataServices.
another approach would be
var results = provider.Media
.AddQueryOption("$filter", "media_id eq 100");
and since OData doesn't support IN
statements you will come up with filter condition like this
.AddQueryOption("$filter", "(media_id eq 100) or (media_id eq 200 ) or ...");
which you can build using loop or linq Select
and string.Join
:
var ids = new [] { 100, 200, 300 };
var filter = string.Join(" or ", ids.Select(i=> $"(media_id eq {i})"));
var results = provider.Media.AddQueryOption("$filter", filter);
UPDATE: There is filter operation field=["a","b"]
however it means something different.
UPDATE2: In OData V4 there is lambda expressions any
and all
, paired with array literal ["a", "b"]
they might work as in
but I was not able to come up with working example using v4 endpoint at OData.org