Entity framework EF Dynamic contains未按预期工作
我使用EntityFramework和库“System.Linq.Dynamic.Core”根据一组值动态选择记录 它在Entity framework EF Dynamic contains未按预期工作,entity-framework,linq,Entity Framework,Linq,我使用EntityFramework和库“System.Linq.Dynamic.Core”根据一组值动态选择记录 它在int[]上运行良好,但返回带有string[]的时髦SQL var whereQuery = _context.Registrations.AsQueryable(); int[] intArray = new[] {1, 2, 3}; string[] array = new[] {"A001", "D444"}; whereQuery = whereQuery.Whe
int[]
上运行良好,但返回带有string[]
的时髦SQL
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语句”
对于字符串[]
,它只检查数组中的第一个值。我希望:
AND ([Extent1].[Code] IN (N'A001', N'D444'))
版本:
System.Linq.Dynamic.Core v1.0.14.0(运行时v4.0.30319)
EntityFramework v6.0.0.0
我缺少什么?使用列表
而不是字符串[]
解决了这个问题
有关更多信息,请参见:
这不是一个bug
原因是测试失败,因为您在
Where子句作为参数。。这实际上意味着如果你提供
类似于{“A001”,“D444”}的数组,代码试图用“A001”替换@0,
并尝试将@1替换为“D444”,以此类推。但你只定义了
@0
回答上面的“不是bug”。
是的,我的示例显示了两次@0。这只是我复制的示例代码。即使只使用1个参数,错误仍然存在。您使用的是哪个动态库/确切的版本?添加了版本