Нужен эффективный способ решить эту проблему с помощью Linq / subsonic - PullRequest
0 голосов
/ 22 марта 2011

У меня есть таблица предложений, в которой есть столбец ID и предложения.Это довольно большая таблица, + - 100000 строк.Мне дан список слов, и мне нужно найти предложения, которые содержат эти слова.Результирующие предложения должны быть уникальными.

_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)

отсюда это довольно просто, но это кажется неэффективным.

1 Ответ

0 голосов
/ 22 марта 2011

Вместо .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
...