2011-03-22 2 views
0

J'ai une table Sentences qui a une colonne ID et phrase. C'est une table assez grande, + - 100000 lignes. On me donne une liste de mots et j'ai besoin de trouver les phrases qui contiennent ces mots. Les phrases résultantes doivent être uniques. A partir de là, c'est assez simple mais cela semble inefficace.Besoin d'un moyen efficace pour résoudre cela avec Linq/subsonic

Répondre

0

Au lieu de .Count()>0, vous devez utiliser .Any().

En outre, il ne semble pas que vous fassiez quelque chose pour obtenir des phrases uniques, comme utiliser un .Distinct() à la fin.

Peut-être comme ceci:

_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

c'est juste un début que je ne suis pas heureux de terminer, car il doit y avoir une meilleure solution que cela. Diviser 100 000 phrases en mots est effrayant. Cela ne peut pas être la seule solution possible. – David

+0

Diviser les phrases en mots est presque certainement le moyen le plus efficace de le faire. Chercher des mots dans des phrases complètes ne va pas être plus rapide. – Gabe

+0

_session.All () .Sélectionnez (T => new {Phrase = T, Descriptions = T.Sentence.Split ('')}). Où (S => S.Sentence.Intersect (mots) .Any()) .Sélectionnez (R => R.Sentence) .Distingué() ne fonctionne pas Je reçois L'expression de type 'System.Collections.Generic.IEnumerable'1 [System.String]' n'est pas une séquence – David

Questions connexes