我需要一些帮助来构建正确的查询。我有一个员工表。我需要获取所有员工的列表,该 EENO(员工 ID)包含来自提供的部分员工 ID 数组的字符串。
当我使用此代码时
// IEnumerable<string> employeeIds is a collection of partial Employee IDs
IQueryable<Employee> query = Employees;
foreach (string id in employeeIds)
{
query = query.Where(e => e.EENO.Contains(id));
}
return query;
我会得到类似的东西:
SELECT *
FROM Employees
WHERE EENO LIKE '%1111111%'
AND EENO LIKE '%2222222%'
AND EENO LIKE '%3333333%'
AND EENO LIKE '%4444444%'
这没有任何意义。 我在生成的 SQL 中需要“OR”而不是“AND”。
谢谢!
更新
当我需要包含这些员工时,我使用 PredicateBuilder 编写的这段代码可以完美运行。
var predicate = PredicateBuilder.False<Employee>();
foreach (string id in employeeIds)
{
var temp = id;
predicate = predicate.Or(e => e.EENO.Contains(temp));
}
var query = Employees.Where(predicate);
现在,我需要编写一个相反的代码,以排除这些员工,这是但它不起作用:生成的 SQL 完全奇怪。
var predicate = PredicateBuilder.False<Employee>();
foreach (string id in employeeIds)
{
var temp = id;
predicate = predicate.And(e => !e.EENO.Contains(temp)); // changed to "And" and "!"
}
var query = Employees.Where(predicate);
return query;
它应该生成像这样的 SQL Where 子句:
WHERE EENO NOT LIKE '%11111%'
AND NOT LIKE '%22222%'
AND NOT LIKE '%33333%'
但它没有发生
生成的 SQL 是这样的:http: //i.imgur.com/9MDP7.png
任何帮助表示赞赏。谢谢。