Я пытаюсь создать фильтры в цикле, которые необходимо объединить, используя условие ИЛИ для отправки в 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
может иметь один набор значений (заголовок и значение) или несколько.Поэтому сначала пытается создать один фильтр, а затем остальные фильтры в цикле, чтобы соединиться с условием ИЛИ.Если у кого-то есть идея избежать этого, я с удовольствием добавлю.Но самое важное, что нужно решить, - это получить условие ИЛИ в фильтре.
Любые идеи будут очень полезны!