0

我不知道为什么这不与循环中的所有项目相交,只是最后两个。我认为它与 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'
4

1 回答 1

0

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

于 2012-08-23T00:13:03.020 回答