2009-05-21 2 views
0

Ich mag würde die folgende SQL-Anweisung mit Subsonic 2,2Führen einzelne Auswahl mit den

SELECT Product.* FROM Product WHERE Product.OurPrice <> Product.RetailPrice 

Die Subsonic Auswahlabfrage ich habe angefangen zu erreichen:

SubSonic.SqlQuery select = new SubSonic.Select() 
.From<Product>() 
.Where(Product.Columns.OurPrice) 
.IsNotEqualTo(... object /*Should be Product.Columns.RetailPrice, but that's giving and exception*/...); 

Meine Frage ist, wie man Teilen Sie SubSonic 2.2 mit, eine Where-Bedingung für eine andere Spalte in derselben Tabelle zu generieren.

+0

Welche Ausnahme bekommen Sie? –

+0

Die Ausnahme (Snippet) ist [Format: Eingabezeichenfolge nicht in einem korrekten Format war.] System.Number.StringToNumber (String str, Number Optionen, NumberBuffer & Nummer, Number Info, Boolean parseDecimal) 7469351 ... [Format: fehlgeschlagen Parameterwert aus einer Zeichenfolge in eine Dezimalzahl umgewandelt.] System.Data.SqlClient.SqlParameter.CoerceValue (Objektwert, MetaType Zieltyp) 4.872.143 ... [SqlQueryException: fehlgeschlagen Parameterwert von einem konvertieren String zu Dezimal.] SubSonic.SqlQuery.ExecuteReader() +57 SubSonic.SqlQuery.ExecuteAsCollection() +80 – csizo

+0

Was sind die Spaltentypen auf Ihren Preisen? Könnten sie nicht numerische Daten oder '$' haben? –

Antwort

0

Es sieht so aus, als ob Sie versuchen, zwei Spalten innerhalb Ihrer Abfrage zu vergleichen. Dies ist in SubSonic 2.2 nicht möglich, es sei denn Sie eine Inline-Abfrage verwenden:

http://subsonicproject.com/docs/Inline_Query_Tool

Sie könnten möglicherweise auch eine Ansicht oder Tabelle basiert Funktion verwenden.

+0

Die Inline-Abfrage funktionierte. Es ist schade, dass es keine andere Option als reines SQL gibt. Zumindest funktioniert es! Vielen Dank. – csizo

0

Die Lösung für das Problem, das oben:

ProductCollection products = new SubSonic.InlineQuery().ExecuteAsCollection<ProductCollection> 
(@"SELECT Product.ProductId, ... Product.ModifiedBy, Product.ModifiedOn, Product.IsDeleted FROM Product WHERE (Product.OurPrice <> Product.RetailPrice)"); 

Repeater1.DataSource = products; 
Repeater1.DataBind(); 
0

Sie die alte Abfrage Objekt (im Lieferumfang noch in 2.2) wie so verwenden können:

Query q = new Query(Product.Schema.TableName).WHERE("OurPrice <> RetailPrice"); 
ProductCollection products = new ProductCollection(); 
products.LoadAndCloseReader(q.ExecuteReader()); 
+0

Wobei eine Einschränkung nicht eine SqlQuery ist, so dass der Code leider nicht funktioniert. –

+0

Entschuldigung, ich dachte an das alte Abfrage-Objekt. Ich habe meine Antwort mit dem richtigen Beispiel aktualisiert –