2009-04-23 13 views
0

J'ai une table a 2 colonnesSubsonic - requête simple

Val1 int

Val2 int

Ma requête très simple.

Je veux obtenir la collection d'archives ont la condition (val1 = Val2),

équivalent à (Select * from table où Val1 = Val2)

J'essaie

IDataReader rdr = nouvelle requête ("Table") WHERE ("Val1 = Val2"). ExecuteReader(); tableColl.LoadAndCloseReader (rdr); rdr.Close();

et

..WHERE (" 'Val1=Val2' ") 
    ..WHERE (Table.Columns.Val1,IsEqualTo,Table.Columns.Val2) //This not reguler I know 
    ..WHERE ("Val"+'='+"Val2") 
    ..... 

toute aide être plus apricated.

Merci.

Répondre

1

Malheureusement, vous aurez besoin de faire cela comme une requête en ligne pour autant que je sais:

TableCollection tableCollection = new InlineQuery() 
    .ExecuteAsCollection<TableCollection>(
    "SELECT * FROM " + Table.Schema.TableName " WHERE " + Table.Columns.Val1 + " = " + Table.Columns.Val2); 
+0

Merci pour votre réponse rapide. Désolé pour l'information manquante. J'utilise Versiyon 2.0.3. Je pense que DB.Select() ... n'est pas supporté dans la version 2.0.3. –

+0

Pas de problème, je me suis rendu compte que ça ne marcherait pas comme je l'avais d'abord suggéré. L'InlineQuery devrait exister dans 2.0.3 et travailler –

+0

Merci pour vos réponses. Malheureusement InlineQuery() non pris en charge Dans 2.0.3 .. Il semble que je dois aller à la version mise à niveau 2.1. –

0

était en même situation récemment et est venu avec ceci:

TableCollection tablecollection = new TableCollection; 
Comparison comp = Comparison.Equals; 
tablecollection.Where(Table.Columns.Val1, comp, Table.Columns.Val2); 
tablecollection.Load(); 

j'ai trouvé ce mieux parce que je n'aime pas les requêtes en ligne. et il donne plus de flexibilité si vous souhaitez autoriser les requêtes ad hoc dans votre application.

+0

Je suis en utilisant ss 2.0.5 – jake

+0

Salut Merci pour votre réponse. Mais je l'ai essayé en version 2.0.3 ça ne marche pas que je m'attendais. Cela suppose 3. param comme paramètre. (Comme tablecollection.Where (Table.Columns.Val1, comp, 5); et générer sql comme ci-dessous /* GetSelectSql (Table1) */SELECT TOP 100 PERCENT [dbo]. [Table1]. [ID], [dbo]. [Table1]. [Val1], [dbo]. [Table1]. [Val2] FROM [dbo]. [Table1] OERE [Table1]. [Val1] = @ Val20 ORDER BY [ID] ASC; êtes-vous fatigué dans 2.0.3? –

0
private void CreateDynamicControls() 
{ 


    panGvHolder.Controls.Clear(); 

    Query qry = Northwind.Product.CreateQuery(); 
    qry.Columns.AddRange(Northwind.Product.Schema.Columns); 
    qry.WHERE("UnitPrice > 15").AND("UnitsInStock < 20 "); 
    //WHERE("UnitPrice > 15").AND("UnitsInStock < 30 "); 



    using (IDataReader rdr = qry.ExecuteReader()) 
    { 
     Response.Write("<table>"); 
     while (rdr.Read()) 
     { 
      Response.Write("<tr>"); 
      for (int i = 0; i < rdr.FieldCount; i++) 
      { 
       Response.Write("<td>"); 
       Response.Write(rdr[i].ToString() + " "); 
       Response.Write("<td>"); 
      } //eof for 
      Response.Write("</br>"); 
      Response.Write("</tr>"); 
     } 
     Response.Write("<table>"); 
    } 
} //eof method