如何在LINQ to WCF数据服务中简化组合谓词?

时间:2012-06-19 20:09:55

标签: c# wcf-data-services predicatebuilder

我使用PredicateBuilderColin Meek's等效于在WCF数据服务友好(即没有调用表达式等)方式中组合谓词。这些适用于某些查询,但随着查询复杂性的增加,“递归达到允许限制”失败。不幸的是,这个限制低于我在我的代码中正常情况下的预期。我也无法事先确定何时达到此限制。

可以:

  • 在遇到WCF数据服务之前简化谓词?
  • 确定查询复杂性何时超过WCF数据服务的限制?

在我的代码中,我正在构建一个接受“州”和“城市”参数的Azure数据市场服务的谓词。我没有为每个城市*州配对发出呼叫,而是按照以下方式编写谓词:

((city eq City11 or city eq City12 ...or city eq City1N) and (state eq State1))
...
or
((city eq CityM1...) and (state eq StateM))

由于表达式树,实际上谓词更像是这样:

((false or (((false or (City eq City11)) or (City eq City12)) and (State eq State1))) or (((false or (City eq City21)) or (City eq City22)) and (State eq State2)))

使用LINQPad我可以捕获请求,手动简化它并证明这些工作曾经简化过。由于我的代码没有尝试简化,因此访问Azure数据服务的OData查询过于复杂/递归并生成异常。在上面的概述中,我应用了诸如(x或y)或z == x或y或z之类的简化,这样可以充分降低查询的复杂性,使其通过集合。因此,我的上述两个问题。

非常感谢任何帮助/指示!

0 个答案:

没有答案