我在员工表中使用bigint
主键字段在数据库和实体数据模型中使用数据库第一种方法。 Employee类具有此结构
public partial class Employee
{
public long Emp_No { get; set; }
public string Name { get; set; }
public string Family { get; set; }
...
}
我用Entity Framework
编写这个基本查询List<long> ids = new List<long>() {1,2,3,4,5,6}
database.Employees.Where(q => ids.Contain(q.Emp_No)).ToList();
按以下方式生成查询:
SELECT
[Extent1].[Emp_No] AS [Emp_No],
[Extent1].[Name] AS [Name],
[Extent1].[Family] AS [Family],
...
FROM [dbo].[Employee] AS [Extent1]
WHERE [Extent1].[Emp_No] IN (cast(0 as bigint),
cast(1 as bigint),
cast(2 as bigint),
cast(3 as bigint),
cast(4 as bigint),
cast(5 as bigint),
cast(6 as bigint))
正如您所看到的那样,Emp_No
和ids
数组的类型都是long
时,查询中存在不必要的强制转换,只有ids
时才会导致执行时间错误数组有很多元素。
如何删除此多余演员?
答案 0 :(得分:4)
转换cast(0 as bigint)
几乎没有任何费用,因为Emp_No
也是bigint
如果你没有强制转换,那么int仍然需要升级为bigint为了能够进行IN
比较,所以演员阵容仍然会发生,就在幕后。
在管理工作室中自己运行查询的非强制版本并获取实际执行计划,您仍会在查询计划中看到转换。
答案 1 :(得分:-2)
不确定你在这里要求的是什么但是......
将long更改为int,查询应该使您成为int而不是bigint。
public partial class Employee
{
public int Emp_No { get; set; }
public string Name { get; set; }
public string Family { get; set; }
....
}
Long相当于bigint。 您可以在此处阅读更多内容:What is the equivalent of bigint in C#?