我不明白为什么这没有与循环中的所有项相交,只与最后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&每个记录有一个单词。我将搜索字符串"慢性肩痛"交叉,得到所有共享这3个单词的ConceptID。它应该返回:
Concept1234 - shoulder
Concept1234 - pain
Concept1234 - chronic
我得到的(只是最后2个):
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'
foreach
循环中有outerquery
,它在循环的每次迭代中都会被替换,并且会丢失以前的数据。