我有一个id列表,我必须在数据库表中搜索。
我有一个员工表,其中员工ID是主键。 我有一个员工ID列表,我必须在这个员工表中搜索</ p>
我正在使用EF 6.1.1,SQL 2012。
这是我的代码段
using (var ctx = new NORTHWNDContext())
{
var eId = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
var r = ctx.Employees.
Join(ctx.Orders,
e => e.EmployeeID,
o => o.EmployeeID,
(e, o) => new { Employee = e, Order = o }
)
.Where(p => eId.Contains(p.Employee.EmployeeID));
var es = ctx.Employees;
foreach (var item in r)
{
var e = item.Employee;
var o = item.Order;
}
}
当EF构建查询并传递给数据库时 如下
SELECT
[Extent1].[EmployeeID] AS [EmployeeID],
[Extent1].[ReportsTo] AS [ReportsTo],
[Extent1].[PhotoPath] AS [PhotoPath],
[Extent2].[OrderID] AS [OrderID],
FROM [dbo].[Employees] AS [Extent1]
INNER JOIN [dbo].[Orders] AS [Extent2] ON [Extent1].[EmployeeID] = [Extent2]
[雇员] WHERE [Extent1]。[EmployeeID] IN(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)
EF查询构建器(表达式构建器)默认情况下不够智能,无法理解这些是重复值并使用一个唯一值。
现在我在列表中进行了过滤,然后将其传递给
.Where(p => eId.Contains(p.Employee.EmployeeID));
这解决了这个问题。但代码更改将在多个位置进行,并且不易维护。
但我想在EF级解决这个问题。
注意: - 我使用简单的查询来解释我的问题。但在实际项目中,我的查询量很大,数据库大小也很大。