2010-07-22 5 views
0

Je souhaite construire la requête qui va être utilisée dans .net. Ci-dessous vous pouvez voir la requête SQL, quelqu'un peut me donner la requête subsonique équivalentSubsonic: requête Selfjoin besoin

SELECT DISTINCT 
    a2.AccountID AS BID, 
    a2.AccountName AS Brand 
FROM 
    Account a 
    INNER JOIN Account a2 ON a.ParentID = a2.AccountID 
WHERE 
    a.AccountTypeID = 6 
ORDER BY 
    Brand 

S'il vous plaît aidez-moi.

Répondre

0

SubSonic 2 ou 3?

Avec SubSonic, vous avez toujours une belle porte dérobée.

Il est appelé à InlineQuery 2.x et 3.x CodingHorror

par exemple:

var result = DB.Query().ExecuteReader("SELECT DISTINCT 
     a2.AccountID AS BID, 
     a2.AccountName AS Brand 
    FROM Account a 
    INNER JOIN Account a2 ON a.ParentID = a2.AccountID 
    WHERE a.AccountTypeID = ?accounttypeid 
    ORDER BY Brand", 6); 

Si vous voulez rester avec l'interface fluide en raison de la vérification de la syntaxe et la conversion sql. Voici une autre approche que je pourrais penser (SubSonic 2.2)

 DataTable result = DB.Select(
       "a1." + Account.Columns.AccountId + " as BID", 
       "a2." + Account.Columns.AccountName + " as Brand") 
      .From(Account.Schema.QualifiedName + " a1") 
      .InnerJoin(Account.Schema.QualifiedName + " a2", 
         "a2." + Account.Columns.account_id, 
       "a1", "a1." + Account.Columns.parent_id) 
      .Where("a1." + Account.Columns.AccountTypeId).IsEqualTo(6) 
      .OrderAsc("a2." + Account.Columns.AccountName) 
      .ExecuteDataSet().Tables[0]; 

Mais je n'ai jamais fait cela et je ne l'ai pas vérifié. Mais peut-être que ça fonctionne.