2011-03-17 5 views
0

Этот код работает отлично:IFullTextQuery - исключение, если существуют также могут объекты

Query query = parser.Parse(expression); 

IFullTextSession session = Search.CreateFullTextSession(this.Session); 

IFullTextQuery fullTextQuery = session.CreateFullTextQuery(query, new[] { typeof(MappedSequence) }); 

var l1 = fullTextQuery.List(); 

тех пор, пока запрос не возвращает слишком много объектов. Если в запросе содержится слишком много объектов, сгенерированный SQL-код слишком длинный, и sql-сервер выдает исключение. Одним из рабочих решений является получение всех объектов с использованием пейджинга, который довольно медленный. Есть ли лучшее решение?

Спасибо.

C

ответ

0

Если я правильно помню, fullTextQuery.List() делает большой

select ... where ID_COL IN (id1, id2, id3, id4 ...) 

где id1, id2 ... являются параметрами, число которых ограничено в SQL Server. Таким образом, вы получаете объекты NHibernate из документов lucene. Короче говоря, нет обходного пути, кроме пейджинга.

Вы можете использовать размер страницы 1000 элементов, если вам действительно нужно получить эту большую часть данных.

Получение 1000 объектов будет где-то медленным: когда вы показываете их на экране, например.

+0

Спасибо. Я тоже это понял. К сожалению, мне нужно создать лист excel с некоторыми параметрами из сообщения формы запроса. Вот почему я должен изгнать так много строк. – cs0815