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(), все будет в порядке и вы все равно сможете использовать вашу активную запись.
Это спасло меня много раз, когда у меня были действительно большие сложные запросы. Просто убедитесь, что вы по-прежнему используете параметры и очистите свои утверждения, чтобы ваш ввод был санирован.