SubSonic Alias ​​/ Где пункт

Я хочу преобразовать следующий 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. Я чувствую, что принимаю сумасшедшие таблетки здесь - это должно быть просто, верно?

Приветствия, Джон Боб

2 ответа

Решение

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

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

subQueryagencyPhoneNumber.Where(whereSql);

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

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

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

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

Другие вопросы по тегам