2010-03-15 7 views
1

Je souhaite convertir la requête SQL suivante en une requête SubSonic.SubSonic Alias ​​/ Where Clause

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

Je pensais que je le ferais comme ci-dessous, mais je ne peux pas l'obtenir pour produire SQL valide.

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

Est-ce que quelqu'un sait comment résoudre ce problème - J'utilise SubSonic 2.2. J'ai l'impression de prendre des pilules folles ici - ça devrait être simple, non?

Cheers, JohnBob

Répondre

1

Je pense que vous aurez besoin d'ajouter l'expression comme à SQL en ligne.
Quelque chose comme:

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

subQueryagencyPhoneNumber.Where(whereSql); 

Voir une question similaire à Calling an SQL function from a Subsonic.Select

+0

Merci pour le commentaire, mais cela n'a pas fonctionné. Il n'enregistre pas l'instruction ci-dessus comme une contrainte valide. – JohnBob

+0

Gave up et l'a fait comme une procédure stockée avec SQL dynamique. blazergh! Je voulais le faire en SubSonic, ah bien. – JohnBob

+0

@JohnBob Pourrait toujours le faire comme CodingHorror pour garder toute la logique dans le code –

1

Si le pire arrive au pire des requêtes vraiment compliquées, vous pouvez toujours utiliser subsonique en utilisant les méthodes .CodingHorror() comme décrit @http://subsonicproject.com/docs/CodingHorror

Tant que vous sélectionnez des noms de colonnes valides que subsonic connait lorsque vous lancez la collection -> .ExecuteAsCollection(), tout ira bien et vous pourrez toujours utiliser l'enregistrement actif. Cela m'a sauvé beaucoup de fois quand j'ai eu de très grandes requêtes compliquées. Assurez-vous de toujours utiliser les paramètres et nettoyer vos instructions afin que votre entrée soit nettoyée.