Edmx文件
<Property Name="SomePrimaryKeyID" Type="bigint" />
对应对象的属性是
<Property Type="Int64" Name="SomePrimaryKeyID" Nullable="false" />
查询:
long[] ids = new long[]{1234567,1234568};
var results = context.SomeEntities.Where(x=> ids.Contains(x.SomePrimaryKeyID)).ToList();
当我使用contains时,EF生成的查询具有显式转换,例如
... WHERE SomePrimaryKeyID IN (CAST (1234567 AS BIGINT),CAST (1234568 AS BIGINT))
由于long对应bigint,我认为不需要演员。有没有办法可以避免这种演员?
答案 0 :(得分:0)
对于文字整数值,SQL Server中的默认类型为int。因为在你的例子中,文字值必须始终被强制转换(如果没有显式强制转换,它们将是'int'类型)以匹配SomePrimaryKeyID
的类型(这是大int)。如果缺少明确的情况,Sql Server将不得不进行隐式转换,这实际上可能更昂贵,因为它必须首先推断SomePrimaryKeyID
的类型才能知道将文字数转换为什么。