我正在尝试在循环中创建过滤器,该循环需要使用 OR 条件组合以作为 URL 的一部分发送到简单 OData 客户端。此代码使用 AND 条件连接它,我需要 OR :
foreach(noteFilters 中的变量注释)
{
request = request.Filter(r => r.Notes.Any(n => n.Header == note.Header && n.Value == note.Note));
}
我试过这段代码:
表达式> condition1 = 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 条件。
任何想法都会有很大帮助!