【发布时间】:2012-08-22 23:36:44
【问题描述】:
我不明白为什么这没有与循环中的所有项目相交,只是最后 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
我得到了什么(只是最后两个):
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'
【问题讨论】:
-
请提供更多信息:您期望什么以及您得到了什么?能给我们举个具体的例子吗?
-
是 LINQ-to-SQL 还是实体框架?两个不同的东西。
标签: c# linq entity-framework iqueryable intersect