После обновления с efcore 2 до efcore 3.1 у нас есть несколько запросов, которые больше не выполняются. Мы знали, что они есть, и я знаю, что размещение .ToList () там "решит" это. Но я бы лучше переписал запрос, чтобы EF.Core мог правильно его перевести, не загружая всех клиентов и не выполнив оценку на «клиенте».
По сути, все, что мне нужно, это клиенты с именем "LIKE", любым из searchPatterns. В efcore 2 это «работало» (хотя теперь я знаю, что это оценивалось «на стороне клиента»).
var searchPatterns = new List<string>() { "Foo", "Bar" };
var customers = context.Customers.Where(c => searchPatterns.Any(f => c.Name.Contains(f))).ToList();
Но в efcore 3.1 я получаю:
System.InvalidOperationException : «LINQ-выражение« DbSet .Where (c => __searchPatterns_0 .Any (f => c .Name.Contains (f))) »не может быть переведено. Либо переписайте запрос в форме, которую можно перевести, либо переключитесь на оценку клиента явно, вставив вызов либо в AsEnumerable (), AsAsyncEnumerable (), ToList (), либо в ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации. '
Любые советы о том, как выбрать элементы, основанные на сравнении поля с элементами в списке?