C# 不必要的bigint转换

C# 不必要的bigint转换,c#,sql-server,entity-framework,expression,C#,Sql Server,Entity Framework,Expression,我在数据库中有带有bigint主键字段的employee表,以及使用数据库优先方法的实体数据模型。Employee类具有这种结构 public partial class Employee { public long Emp_No { get; set; } public string Name { get; set; } public string Family { get; set; } ... } 我使用实体框架编写这个基本查询 List<l

我在数据库中有带有
bigint
主键字段的employee表,以及使用数据库优先方法的实体数据模型。Employee类具有这种结构

public partial class Employee
{
     public long Emp_No { get; set; }
     public string Name { get; set; }
     public string Family { get; set; }
     ...
}
我使用实体框架编写这个基本查询

List<long> ids = new List<long>() {1,2,3,4,5,6}
database.Employees.Where(q => ids.Contain(q.Emp_No)).ToList();
正如您所看到的,当
Emp\u No
ids
数组的类型都是
long
时,在查询中对bigint进行不必要的强制转换,特别是当
ids
数组有许多元素时,它会导致错误的执行时间


如何删除此多余的强制转换?

不确定您在这里要求什么,但是

将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。
您可以在这里阅读更多内容:

转换
转换几乎没有成本(0为bigint)
并且因为
Emp\u no
也是
bigint
如果您没有转换,int仍然需要升级为bigint才能在比较中执行
,因此转换仍然会发生,就在幕后


在management studio中自己运行查询的非强制转换版本,并获取实际的执行计划,您仍将在查询计划中看到转换。

我不能这样做。。我需要长字体
public partial class Employee
 {
     public int Emp_No { get; set; }
     public string Name { get; set; }
     public string Family { get; set; }
     ....
 }