在Filter子句OData .NET中设置实体的默认值

时间:2015-08-14 12:27:03

标签: odata

是否有任何方法可以确保将某些属性或运算符添加到OData表达式树中,即使它们未在URL中指定?例如,我想在执行搜索时每次添加一些日期时间约束,即使用户没有在URL中指定它。

最近我有一个问题,使请求案例不变,我解决了它通过遍历OData表达式树并添加新的函数调用,这似乎有点矫枉过正,从那以后我没有找到更好的东西。我正在使用OData 6.10。

1 个答案:

答案 0 :(得分:0)

如果要根据用户请求应用某些固定查询子句,可以使用AND二元运算符构建新的查询表达式,以组合您的fixed子句和用户子句。

例如,要将查询产品的限制添加到比2013年更新的ReleaseDate,您可以执行以下操作:

// Fixed clause
var parser = new ODataUriParser(model, new Uri("Products?$filter=ReleaseDate ge 2013-01-01T00:00:00Z", UriKind.Relative));
var fixedExp = parser.ParseFilter().Expression;

// User clause
parser = new ODataUriParser(model, new Uri("Products?$filter=Rating eq 1", UriKind.Relative));
var userExp = parser.ParseFilter().Expression;

var newExp = new BinaryOperatorNode(BinaryOperatorKind.And, fixedExp, userExp);