【发布时间】:2011-06-16 03:00:10
【问题描述】:
我正在尝试使用 LinqToSQL 生成一个可能包含很多项目的 IN 子句。我原来的代码是这样的:
context.Employees.Where(p => EmployeeIDs.Contains(p.EmployeeID));
最终生成一个 in 子句,其中每个员工 ID 作为 SQL 参数。问题是如果超过 2100 个参数,就会引发异常。通过执行多个查询并组合结果,我已经在我的应用程序的其他地方解决了这个问题。这在简单的情况下工作正常,但我现在正在做一些更复杂的事情,我认为这不是最好的解决方案。
无论如何,Contains 会生成类似
的东西EmployeesID IN (@p0, @p1, @p2)
但是有没有办法说服它这样做呢?
EmployeesID IN (23, 582, 3948)
我开始走上使用动态查询示例的道路,但后来意识到它似乎只用于编写动态 linq 代码,而不是动态 sql。然后我找到了 ExecuteQuery,但我不想手动构建整个查询字符串,只是我想要的查询的特定部分。
更具体地说,我想要这样的东西:
context.Employees
.Where(p => p.Active == true)
.Where("EmployeeID IN (23, 582, 3948)");
或者最好(如果这会在不使用参数的情况下生成 IN):
context.Employees
.Where(p => p.Active == true)
.Where(p => p.In("EmployeeID", EmployeeIDs));
有什么办法吗?谢谢。
【问题讨论】:
标签: c# sql-server-2005 linq-to-sql