【问题标题】:combine multiple filters with Or condition and send it Simple Odata Client - C#将多个过滤器与 Or 条件组合并将其发送 Simple Odata Client - C#
【发布时间】: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 条件。

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

【问题讨论】:

标签: c# filter conditional-statements odata


【解决方案1】:

尝试将&amp;&amp; 更改为||

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

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

【讨论】:

  • 不,我想要循环通过的每个“音符”之间的 OR 条件。目前它正在给予喜欢
猜你喜欢
  • 2023-03-06
  • 2017-03-28
  • 1970-01-01
  • 2018-05-15
  • 2021-02-23
  • 2019-10-10
  • 1970-01-01
  • 2014-12-13
  • 2016-09-23
相关资源
最近更新 更多