объединить несколько фильтров с условием Or и отправить его Simple Odata Client - C # - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь создать фильтры в цикле, которые необходимо объединить, используя условие ИЛИ для отправки в Simple OData Client как часть URL.Этот код присоединяется к нему, используя условие AND, и мне нужно OR:

foreach (var note in 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): значение (ServiceChannel.Api.ServiceChannelApiClient + <> c__DisplayClass12_0) .noteFilters.get_Item (0) .Hheader

может иметь один набор значений (заголовок и значение) или несколько.Поэтому сначала пытается создать один фильтр, а затем остальные фильтры в цикле, чтобы соединиться с условием ИЛИ.Если у кого-то есть идея избежать этого, я с удовольствием добавлю.Но самое важное, что нужно решить, - это получить условие ИЛИ в фильтре.

Любые идеи будут очень полезны!

1 Ответ

0 голосов
/ 28 сентября 2019

Попробуйте изменить && на ||

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

Подробнее о булевых логических операторах здесь .

...