Мы преобразовываем из LINQ в SQL в Entity Framework Core 2.2 и обнаруживаем, что перевод операций Contains не становится выражениями IN в SQL Server.Происходит то, что EFCore извлекает все данные, используя другие условия, а затем фильтрует их локально.Это не приемлемо.Мы можем использовать EF.Functions.Contains, но для этого необходимо, чтобы мы включили полнотекстовый поиск в SQL Server, что является чрезмерным уничтожением.
Любая идея, как получить оператор, подобный следующему, для перевода в предложение IN в SQLСервер?
var myValues = new [] { 1, 2, 3, 4, 5 };
var qry = _context.Table.Where(t => myValues.Contains(t.TableProperty));
Ладно, может быть, я упростил код, чтобы он был проще для вопроса.Фактический код выглядит следующим образом:
voterQuery = voterQuery.Where(v => voterFilter.VoterStatus.Select(p => p.Value).Contains(v.VotStatus.ToString()));
В нашем коде происходит то, что мы создаем IQueriable из пользовательских выборок на экране фильтрации.voterFilters содержит коллекцию этих критериев выбора.VoterStatus - это один из критериев выбора, который представляет собой список, который принадлежит элементу управления Winforms CheckedListItems.Выбор p.Value возвращает список строк.Я попытался спроецировать список строк в массив с теми же результатами, что и предложение IN, которое не было создано, или запросом к серверу.Возможно, EFCore не позволяет использовать строки для значений предложения IN.Любое понимание будет оценено.