SubSonic Alias ​​/ Где пункт - PullRequest
1 голос
/ 15 марта 2010

Я хочу преобразовать следующий SQL-запрос в SubSonic Query.

SELECT [dbo].[tbl_Agency].[ParentCompanyID] FROM [dbo].[tbl_Agency] WHERE REPLACE(PhoneNumber, ' ', '') LIKE REPLACE('%9481 1111%', ' ', '')

Я думал, что сделаю это, как показано ниже, но я просто не могу заставить его производить корректный SQL.

     //SubSonic
     string agencyPhoneNumber = "9481 1111";
     SubSonic.SqlQuery subQueryagencyPhoneNumber = new SubSonic.Select(Agency.ParentCompanyIDColumn.ColumnName);
            subQueryagencyPhoneNumber.From(Agency.Schema.TableName);

     //WHERE
     subQueryagencyPhoneNumber.Where("REPLACE(" + Agency.PhoneNumberColumn.ColumnName + ", ' ', '')").Like("%" + agencyPhoneNumber + "%");

Кто-нибудь знает, как это исправить - я использую SubSonic 2.2. Я чувствую, что принимаю сумасшедшие таблетки здесь - это должно быть просто, верно?

Cheers, JohnBob

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Если худшее приходит к худшему с действительно сложными запросами, вы все равно можете использовать дозвуковые, используя методы .CodingHorror (), как описано @ http://subsonicproject.com/docs/CodingHorror

Пока вы выбираете допустимые имена столбцов, о которых Subonic знает при создании коллекции -> .ExecuteAsCollection (), все будет в порядке и вы все равно сможете использовать вашу активную запись.

Это спасло меня много раз, когда у меня были действительно большие сложные запросы. Просто убедитесь, что вы по-прежнему используете параметры и очистите свои операторы, чтобы ваш ввод был санирован.

1 голос
/ 15 марта 2010

Я думаю, вам нужно добавить подобное выражение во встроенный SQL.
Что-то вроде:

var whereSql = string.Format("REPLACE({0}, ' ', '') Like '%{1}%'", Agency.PhoneNumberColumn.ColumnName, agencyPhoneNumber);

subQueryagencyPhoneNumber.Where(whereSql);

См. Аналогичный вопрос на Вызов функции SQL из Subsonic.Select

...