B.B*_*dan 1 c# linq entity-framework
我Contact在SQL Server中有一个表,我在我的C#控制台应用程序中使用Entity Framework映射表:
EmployeeId FirstName LastName
--------------------------------
1 Ram Kumar
2 Mohan Raj
3 Aravind Swaamy
4 Ajay Kumar
5 Ram Raj
Run Code Online (Sandbox Code Playgroud)
我需要获取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);
Run Code Online (Sandbox Code Playgroud)
请Find通过传递主键值列表来帮助我如何使用方法获取记录列表.
有些人认为这个问题是如何在实体框架中进行"in"查询的重复?.不,这绝对是错的.我的问题是如何使用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
Run Code Online (Sandbox Code Playgroud)
在三个数据库往返中.根据定义,这比这慢:
SELECT * FROM Employee WHERE EmployeeId IN (1, 3, 5)
Run Code Online (Sandbox Code Playgroud)
如果数据计数很大,则WHERE子句的执行速度比FIND慢.这是事实.
不,这不对.Find()不是SQL.它转换WHERE PK_COL=value为一个记录的任意数量的主键列和值.Find()有一个params参数的原因是因为复合主键.
因此,我之前链接 的副本确实回答了您的问题并完全符合您的要求:
var primaryKeys = new int[] { 1, 3, 5 };
var employees = dbContext.Employee.Where(e => primaryKeys.Contains(e.EmployeeId));
Run Code Online (Sandbox Code Playgroud)
这转换为WHERE ... IN上面显示的.
| 归档时间: |
|
| 查看次数: |
2936 次 |
| 最近记录: |