如何将DataServiceQuery表达式与AddQueryOption合并

时间:2013-11-28 12:56:06

标签: linq odata wcf-data-services

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();

0 个答案:

没有答案