【发布时间】:2017-06-25 16:21:10
【问题描述】:
我在数据库中有带有bigint 主键字段的员工表和采用数据库优先方法的实体数据模型。 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();
它生成如下查询:
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))
正如您所见,查询中没有必要强制转换为 bigint,而 Emp_No 和 ids 数组的类型都是 long,这会导致执行时间很差,特别是当 ids 数组有很多元素时。
如何删除这个多余的演员表?
【问题讨论】:
标签: c# sql-server entity-framework expression