我无法弄清楚为什么这不会与循环中的所有项目相交,只是最后的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
对于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'
答案 0 :(得分:0)
outerquery
循环中有foreach
,在循环的每次迭代中都会被替换,并且您丢失了以前的数据。