正しいクエリを作成するのに助けが必要です。Employeesテーブルがあります。すべての従業員のリストを取得する必要があります。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で「AND」の代わりに「OR」が必要です。
ありがとうございました!
アップデート
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;
次のようなSQLWhere句を生成することになっています。
WHERE EENO NOT LIKE '%11111%'
AND NOT LIKE '%22222%'
AND NOT LIKE '%33333%'
しかし、それは起こっていません
生成されるSQLは次のとおりです:http://i.imgur.com/9MDP7.png
どんな助けでも大歓迎です。ありがとう。