我在SQL Server中有一个Contact
表,我在C#控制台应用程序中使用Entity Framework映射了该表:
EmployeeId FirstName LastName
--------------------------------
1 Ram Kumar
2 Mohan Raj
3 Aravind Swaamy
4 Ajay Kumar
5 Ram Raj
我需要获取1、3、5(
EmployeeId
)的记录目前,我正在按照以下方式进行
List<Employees> emp = new List<Employees>();
var emp1 = dbContext.Employee.Find(1);
var emp3 = dbContext.Employee.Find(3);
var emp5 = dbContext.Employee.Find(5);
emp.Add(emp1);
emp.Add(emp3);
emp.Add(emp5);
请通过传递主键值列表来帮助我如何使用
Find
方法获取记录列表。有人认为该问题与How to do an "in" query in entity framework?重复。不,这是绝对错误的。我的问题是如何使用
Find
扩展方法获取多个记录。因为IN
操作的执行速度比Find
操作慢。
最佳答案
我的问题是如何使用FIND扩展方法获取多个记录。
你不能Find()
查找一条记录,这不是您想要的。
因为IN操作的执行速度比FIND操作慢。
不,这不对。您当前的代码执行此操作:
SELECT * FROM Employee WHERE EmployeeId = 1
SELECT * FROM Employee WHERE EmployeeId = 3
SELECT * FROM Employee WHERE EmployeeId = 5
在三个数据库往返中。从定义上讲,这比这要慢:
SELECT * FROM Employee WHERE EmployeeId IN (1, 3, 5)
如果数据量很大,则WHERE子句的执行速度将比FIND慢。这是事实。
不,这不对。
Find()
不是SQL。对于一条记录的任何数量的主键列和值,它将转换为WHERE PK_COL=value
。 Find()
具有params
参数的原因是由于复合主键。因此,duplicate I linked to before确实回答了您的问题,并且确实满足您的要求:
var primaryKeys = new int[] { 1, 3, 5 };
var employees = dbContext.Employee.Where(e => primaryKeys.Contains(e.EmployeeId));
转换为上面显示的
WHERE ... IN
。
关于c# - 通过传递主键列表在Entity Framework中使用Find方法的多个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41933635/