OData linq不支持包含或任何类型的“in”检查。为解决这个问题,大家提出了以下解决方案:
OData "where ID in list" query
问题在于我想将此解决方案与常规Where子句混合使用。如果我只是添加AddQueryOption,我将清除Where添加的所有先前过滤器。我试图提取由Where生成的初始$ filter并将其附加到“in”子句中,然后调用AddQueryOption - 没有任何成功。据我所知,翻译表达式的大多数类都是内部的。所以我找不到任何注入自定义代码的方法。任何想法如何做到这一点? 一般来说我想要这样的东西:
provider.Collection.Where(data => data.Name ="aaa" and categories.Contains(data.CategoryId))
不幸的是,代码不能解决这个问题:
private DataServiceQuery<TElement> AddContains(DataServiceQuery<TElement> query, string [] categories)
{
var filterParams = categories.Select(id => string.Format("(CategoryId eq '{0}')", id));
var filter = string.Join(" or ", filterParams);
//filter = originalFilter + " and " + string.Join(" or ", filterParams);
// also doesn't work
return query.AddQueryOption("$filter", filter);
}
var query = provider.Collection.Where(data => data.Name ="aaa") as DataServiceQuery<TElement>;
var results = AddContains(query, new string[] {"1","2"}).Execute().ToList();