Я использую EntityFramework и библиотеку System.Linq.Dynamic.Core для динамического выбора записей на основе массива значений.
Отлично работает для int[]
, но возвращает фанк SQL с string[]
.
var whereQuery = _context.Registrations.AsQueryable();
int[] intArray = new[] {1, 2, 3};
string[] array = new[] {"A001", "D444"};
whereQuery = whereQuery.Where($"@0.Contains(RegistrationId)", intArray);
whereQuery = whereQuery.Where($"@0.Contains(Code)", array);
При отладке я вижу, что генерируется следующий SQL-оператор
...
FROM [dbo].[Registrations] AS [Extent1]
WHERE ([Extent1].[RegistrationId] IN (1, 2, 3))
AND (( CAST(CHARINDEX([Extent1].[Code], N'A001') AS int)) > 0)
Для int[]
он генерирует правильный / ожидаемый «оператор IN».
Для string[]
он проверяет только первое значение из массива.Я ожидаю:
AND ([Extent1].[Code] IN (N'A001', N'D444'))
Версии:
System.Linq.Dynamic.Core v1.0.14.0 (время выполнения v4.0.30319)
EntiftyFramework v6.0.0.0
Что мне не хватает?