我不知道为什么这不与循环中的所有项目相交,只是最后两个。我认为它与 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
我得到了什么(只是最后两个):
Concept1234 - pain
Concept1234 - chronic
即使使用我拥有的这台怪物服务器,对 3500 万条记录进行 OR 操作也很困难,并且相交是在不到一秒的时间内完成操作的唯一方法。
我试图用 LINQ to SQL(实体框架)生成的是这个 -
SELECT ConceptID FROM WordTable WHERE Word = 'shoulder'
INTERSECT
SELECT ConceptID FROM WordTable WHERE Word = 'pain'
INTERSECT
SELECT ConceptID FROM WordTable WHERE Word = 'chronic'