2012-08-22 24 views
0

我想不通這是爲什麼不相交的所有項目中循環,剛剛過去的2我認爲這事做的IQueryableSql的Linq鏈式相交

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。單詞可以有多個概念ID &每個記錄有1個單詞。我要交叉搜索字符串'肩膀疼痛慢性',並獲得所有共享這3個單詞的ConceptID。它應該返回:

Concept1234 - shoulder 
Concept1234 - pain 
Concept1234 - chronic 

什麼我得到(剛剛過去2):

Concept1234 - pain 
Concept1234 - chronic 

35萬條記錄,這樣做的或粗糙即使有這樣的怪物服務器我有&的交點是隻有不到一秒的時間才能做到這一點。

我試圖使用LINQ到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

它是LINQ到SQL還是實體框架?兩件不同的事情。 –

回答

0

你有outerqueryforeach環路被在每次循環替換內,你失去了以前的數據。

+0

但不應該在外部查詢上相交,然後再次將其設置爲外部查詢以保持更改? – Alex