Тип узла выражения LINQ Invoke не поддерживается в LINQ to Entities. Как решить другим способом?

Есть ли другой способ решить эту проблему? Помимо использования .AsExpandable() с помощью Linqkit. Помогите, если есть другой способ.

private static IQueryable<Data.BidVehicle> PredicateBuilderQuery(IQueryable<Data.Vehicle> vehicles, List<string> MileAge)
{

    var predicate = PredicateBuilder.True<Data.BidVehicle>();

    foreach (var mpgc in MileAge)
    {
        int[] splitDash = SplitAndTrimDashInt(mpgc);
        int min = splitDash[0];
        int max = splitDash[1];

        predicate = predicate.Or(p => p.IVehicle.Mileage >= min && p.IVehicle.Mileage <= max);

    }

    vehicles= vehicles.Where(predicate);
  //vehicles= vehicles.AsExpandable().Where(predicate);

    return vehicles;
}

person Anthony Quartz    schedule 10.07.2019    source источник
comment
Возможный дубликат выражения LINQ Тип узла «Invoke» не поддерживается в LINQ to Entities — тупик!   -  person Renat    schedule 10.07.2019
comment
Есть ли причина, по которой вы создаете такой предикат, а не просто создаете обычный Expression<>?   -  person DavidG    schedule 10.07.2019
comment
@DavidG Я все еще новичок в C # и использую Entity Framework для БД. Я пытаюсь построить множественный динамический запрос. и класс PredicateBuilder - единственное решение, с которым я столкнулся для решения проблемы. Теперь код работает нормально, когда я устанавливаю Linqkit для использования .AsExpandable() . Но я пытаюсь выяснить, есть ли какое-нибудь решение, чтобы я не устанавливал и не использовал Linqkit.   -  person Anthony Quartz    schedule 10.07.2019
comment
Но что вы пытаетесь сделать здесь? Не ясно.   -  person DavidG    schedule 10.07.2019
comment
Я пытаюсь сделать динамический запрос ИЛИ. Пользователь выбирает пробег. Пробег — это список по выбору пользователей. Я не могу сделать .Where(p =› p.IVehicle.Mileage ›= min && p.IVehicle.Mileage ‹= max || p =› p.IVehicle.Mileage ›= min && p.IVehicle.Mileage ‹= max ). Ибо он динамичен. Вот почему я использую PredicateBuilder.   -  person Anthony Quartz    schedule 10.07.2019
comment
Что такое p.IVehicle? Может быть, вам следует показать весь класс Data.BidVehicle.   -  person Gert Arnold    schedule 10.07.2019
comment
Я столкнулся с аналогичной проблемой в своем коде полного внешнего соединения — он строит деревья выражений для полного внешнего соединения, отлично работал в LINQ to SQL, но не в EF. Я построил ExpressionVisitor, который, по сути, является ограниченной версией Invoke/Expand LINQKit под названием Apply, который на месте расширяет LambdaExpression, который вы можете увидеть здесь< /а>. Обратите внимание, что этот конкретный Apply имеет особое значение для распространения null, когда null является аргументом (статически обрабатывает null.member -> null, как если бы это был null?.member).   -  person NetMage    schedule 10.07.2019
comment
См. также этот ответ.   -  person NetMage    schedule 10.07.2019