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; }
....
}