1

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();

当我使用包含时,EF 生成的查询具有显式转换,例如

... WHERE SomePrimaryKeyID IN (CAST (1234567 AS BIGINT),CAST (1234568 AS BIGINT))

由于 long 对应于 bigint,我认为不需要强制转换。有没有办法可以避免这种演员?

4

1 回答 1

0

对于文字整数值,SQL Server 中的默认类型是 int。因此,在您的示例中,必须始终强制转换文字值(如果没有显式强制转换,它们将是“int”类型)以匹配SomePrimaryKeyID(即 big int)的类型。如果缺少显式大小写,Sql Server 将不得不进行隐式转换,这实际上可能会更昂贵,因为它必须首先推理类型SomePrimaryKeyID才能知道将文字数字转换为什么。

于 2013-09-26T20:25:24.227 回答