1

次のSQLクエリをSubSonicクエリに変換したいと思います。

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 + "%");

これを修正する方法を知っている人はいますか?私はSubSonic2.2を使用しています。私はここでクレイジーな薬を飲んでいるような気がします-これは簡単なはずですよね?

乾杯、ジョンボブ

4

2 に答える 2

1

インラインSQLに同様の式を追加する必要があると思います。
何かのようなもの:

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

subQueryagencyPhoneNumber.Where(whereSql);

SubsonicからのSQL関数の呼び出しで同様の質問を参照してください。

于 2010-03-15T12:17:00.827 に答える
1

非常に複雑なクエリで最悪の事態が発生した場合でも、@ http://subsonicproject.com/docs/CodingHorrorで説明されているように.CodingHorror()メソッドを使用して亜音速を使用できます。

コレクションをキャストするときにsubsonicが認識している有効な列名を選択する限り、-> .ExecuteAsCollection()で問題なく、アクティブレコードを使用できます。

これにより、非常に大規模で複雑なクエリを実行する時間を大幅に節約できました。入力がサニタイズされるように、パラメーターを使用し、ステートメントをクリーンアップすることを確認してください。

于 2010-03-19T08:58:05.650 に答える