Subsonic SimpleRepository NullReferenceException в Содержит с приведением - PullRequest
0 голосов
/ 21 июля 2010

У меня проблема с этим subsonic3.0.0.4 оператором поиска:

rep = new SimpleRepository(" ... ");
rep.Find<MyObject>( x => x.Code.ToString("00000").Contains("023") );

Поле Код имеет значение Long, и мне нужен запрос sql:

* ВЫБРАТЬ * ИЗ ... ГДЕ конвертировать (varchar, Code) LIKE '% 023%' *

Когда я выполняю это, NullReferenceException. Тогда проблема - приведение к строке для фильтра LIKE. Но я не знаю, как ее решить.

Трассировка стека: в SubSonic.SqlGeneration.ANSISqlGenerator.GenerateConstraints () в SubSonic.SqlGeneration.ANSISqlGenerator.BuildSelectStatement () в SubSonic.Query.SqlQuery.BuildSqlStatement () в SubSonic.Query.SqlQuery.GetCommand () в SubSonic.Query.SqlQuery.ExecuteTypedListT в SubSonic.Repository.SimpleRepository.Find [T] (выражение `Выражение`1) в agf.FormMain.BindGrid () в C: \ dev \ localhost \ AGF \ trunk \ AGF \ FormMain.cs: строка 351

Спасибо !!

1 Ответ

0 голосов
/ 29 июля 2010

Это «ошибка» - SubSonic пытается преобразовать ваше выражение в предложении where в оператор SQL.SubSonic дает лучшее преобразование оператора x.Code в строку, но не знает - и не может гарантировать для нескольких типов баз данных - что ваш toString ("00000") будет успешно выполнен.

Исключениенемного более ясно.

Попробуйте преобразовать ваше значение в выражении «Contains» во что-то вроде «00023» и опустите выражение формата в вашей ToString - это должно быть функциональным эквивалентом и будет работать.

...