2

我正在尝试在循环中创建过滤器,该循环需要使用 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 条件。

任何想法都会有很大帮助!

4

1 回答 1

0

尝试更改&&||

request = request.Filter(r => r.Notes.Any(n => n.Header == note.Header || n.Value == note.Note));

您可以在此处找到有关布尔逻辑运算符的更多信息。

于 2019-09-27T23:53:54.123 回答