Linq到Sql链接相交

时间:2012-08-22 23:36:45

标签: c# linq entity-framework iqueryable intersect

我无法弄清楚为什么这不会与循环中的所有项目相交,只是最后的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'

1 个答案:

答案 0 :(得分:0)

outerquery循环中有foreach,在循环的每次迭代中都会被替换,并且您丢失了以前的数据。