C# 在WebAPI中使用ODataQueryOptions查询特定于域的数据模型
我有一个基于特定领域数据模型的WebAPI,该模型使用专有数据存储 数据存储有一个SDK,允许通过OData执行典型的检索/过滤操作,如“and”、“or”、“eq”、“ne”和“substring”等功能 我的端点接受C# 在WebAPI中使用ODataQueryOptions查询特定于域的数据模型,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个基于特定领域数据模型的WebAPI,该模型使用专有数据存储 数据存储有一个SDK,允许通过OData执行典型的检索/过滤操作,如“and”、“or”、“eq”、“ne”和“substring”等功能 我的端点接受ODataQueryOptions其中T=DTO 我可以通过options.filter返回一个 它又包含一个表示$filter的AST的属性 我正在寻找以下方面的指南和示例: 是否有一种最佳/指定的方式来遍历此AST,以便我可以构建相应的特定于域的查询,通过它的SDK向底层数据
ODataQueryOptions
其中T=DTO
我可以通过options.filter返回一个
它又包含一个表示$filter
的AST的属性
我正在寻找以下方面的指南和示例:
IQueryable
不是一个选项我不知道什么是“最好的”方法,但这里有一种遍历/解析复杂表达式(部分伪代码)的通用方法。这种方法保留了运算符的优先级
string Expression(inValue)
{
//expression can be any of Literal, OR, AND, Equality, Greater Than etc...
if(inValue is boolean or)
return BooleanOR(inValue);
else if(inValue is boolean and)
return BooleanAND(inValue);
else if(inValue is equality comparison)
return Equality(inValue);
//...etc etc
else
return inValue.LiteralValue;
}
string BooleanOR(inValue)
{
return "(" + Expression(inValue.Operand1) + " OR " + Expression(inValue.Operand2) + ")";
}
string BooleanAND(inValue)
{
return "(" + Expression(inValue.Operand1) + " AND " + Expression(inValue.Operand2) + ")";
}
string Equality(inValue)
{
return "(" + Expression(inValue.Operand1) + " = " + Expression(inValue.Operand2) + ")";
}