これがループ内のすべてのアイテムと交差していない理由がわかりません.最後の2つだけです.IQueryableと関係があると思います.
var outerquery = db.Employees.Where(x => x.Name = "Smith").Select(x => x.EmployeeID);
foreach(var name in nameList){
var innerQuery = db.Employees.Where(x => x.Name = name).Select(x => x.EmployeeID);
outerquery = outerquery.Intersect(innerQuery);
}
return outerquery.ToList();
編集 - より具体的な例。テーブルには約 3500 万のレコードがあります。
テーブルには ID、ConceptID、Word があります。単語は複数の ConceptID を持つことができ、レコードごとに 1 つの単語があります。検索文字列 '肩の痛み 慢性' を交差させて、これら 3 つの単語を共有するすべての ConceptID を取得する必要がありました。次のように返されます。
Concept1234 - shoulder
Concept1234 - pain
Concept1234 - chronic
私が得ているもの(最後の2つだけ):
Concept1234 - pain
Concept1234 - chronic
3,500 万件のレコードに対して OR を実行するのは、私が持っているこのモンスター サーバーでも大雑把であり、1 秒以内にそれを実行するには交差が唯一の方法です。
LINQ to SQL (Entity Framework) で生成しようとしているのはこれです -
SELECT ConceptID FROM WordTable WHERE Word = 'shoulder'
INTERSECT
SELECT ConceptID FROM WordTable WHERE Word = 'pain'
INTERSECT
SELECT ConceptID FROM WordTable WHERE Word = 'chronic'