NHibernate RowCount в LINQ создает исключение SQL - PullRequest
1 голос
/ 09 мая 2011

У меня есть запрос, в котором меня интересует только количество строк, однако запрос, который выдает NHibernate, не работает с Sybase.У меня уже есть собственный диалект Sybase, но я не могу найти, где переопределить rowcount.

Учитывая следующий код:

var a = from b in table where b.something = 5 select b
var rows = a.Count

Создает SQL, подобный этому:

select cast(count(*) as INTEGER) as p1 from table

Я не понимаю, почему NHibernate хочет привести результат подсчета, и как я могу переопределить диалект или что-то еще, чтобы NHibernate не включал приведение.В любом случае результат подсчета может быть преобразован в целое число.

Если я, тем не менее, использую QueryOver, все работает отлично.Проблема, однако, в том, что одно из моих условий зависит от длины строки (да, дизайн БД мог бы быть лучше, но в настоящее время я не могу его изменить).Использование linq для вызова .Length на строку в условиях работы.Однако я не могу использовать длину строки в качестве условия в выражениях QueryOver.Мне также нужна операция содержимого, которая работает с linq, но не с QueryOver.

Есть ли способ переопределить способ создания запроса Count, чтобы он работал?Меня интересует только соответствие строк, а не количество, есть ли другой способ сделать это?Может вместо QueryOver?интерфейс для использования длины SQL и в операторах?

1 Ответ

1 голос
/ 09 мая 2011

Вы можете понять, есть ли какие-либо строки, соответствующие с помощью любой функции, подобной этой:

var a = from b in table where b.something = 5 select b; 
var isMatch = a.Any();
...