2011-03-22 16 views
0

我有一個表有句號和句子列的句子。這是一個相當大的表,+ - 100000行。給我一個單詞列表,我需要找到包含這些單詞的句子。結果句子必須是唯一的。需要有效的方法來解決這與Linq/subsonic

_session.All<Sentence>() 
     .Select(T => new { ID = T.ID, Sentences = T.sentence.Split(' ') }) 
     .Where(S => S.Sentences.Intersect(Words).Count()>0) 
     .Select(R=>R.ID) 

從這裏它很簡單,但這似乎效率低下。

回答

0

而不是.Count()>0您應該使用.Any()

此外,它不會顯示您正在做任何事情來獲得獨特的句子,如最後使用.Distinct()

也許是這樣的:

_session.All<Sentence>() 
     .Select(T => new { ID = T.ID, Sentences = T.sentence.Split(' ') }) 
     .Where(S => S.Sentences.Intersect(Words).Any()) 
     .Select(R=>R.ID) 
     .Distinct() // may not be necessary 
+0

這僅僅是一個開始,我不是高興完成,因爲必須有比這更好的解決方案。將100 000個句子分成單詞是很可怕的。這不可能是唯一可能的解決方案。 – David 2011-03-22 08:07:19

+0

將句子拆分成單詞幾乎肯定會成爲最有效的方法。在完整的句子中尋找單詞不會更快。 – Gabe 2011-03-22 08:12:56

+0

_session.All ().Select(T => new {Sentence = T,Descriptions = T.Sentence.Split('')})。(S => S.Sentence.Intersect(words).Any() ).Select(R => R.Sentence).Distinct()不工作我得到類型'System.Collections.Generic.IEnumerable'1 [System.String]'的表達式不是序列 – David 2011-03-22 08:32:43

相關問題