【发布时间】:2020-01-28 05:41:06
【问题描述】:
我正在尝试在循环中创建过滤器,该循环需要使用 OR 条件组合以作为 URL 的一部分发送到简单 OData 客户端。此代码使用 AND 条件连接它,我需要 OR :
foreach(noteFilters 中的变量注释)
{
request = request.Filter(r => r.Notes.Any(n => n.Header == note.Header && n.Value == note.Note));
}
我试过这段代码:
表达式> 条件1 = r => r.Notes.Any(n => n.Header == noteFilters[0].Header && n.Value == noteFilters[0].Note);
var filter = new ODataExpression(condition1);
for (int i = 1; i <= noteFilters?.Count - 1; i++)
{
Expression<Predicate<LocationWithNotesResponse>> condition2 = r => r.Notes.Any(n => n.Header == noteFilters[i].Header && n.Value == noteFilters[i].Note);
filter = filter || new ODataExpression(condition2);
}
request = request.Filter(filter);
在将 condition1 转换为 ODataExpression 时出现此错误:不支持 System.Linq.Expressions.PropertyExpression (MemberAccess) 类型的表达式:value(ServiceChannel.Api.ServiceChannelApiClient+c__DisplayClass12_0).noteFilters.get_Item(0).Header
我的 noteFilters 可以有一组值(标题和值)或多个。这就是为什么首先尝试创建一个过滤器,然后在循环中创建其余过滤器以加入 OR 条件。如果有人有更好的想法来避免这种情况,我很乐意补充。但最重要的是要解决过滤器中的 OR 条件。
任何想法都会有很大帮助!
【问题讨论】:
-
这里是一个如何创建 in 运算符的示例:github.com/simple-odata-client/Simple.OData.Client/issues/576
标签: c# filter conditional-statements odata