Выполните одиночный выбор с помощью где

Я хотел бы получить следующий оператор SQL с дозвуковой 2.2

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

Запрос выбора Subsonic, с которого я начал:

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*/...);

Мой вопрос в том, как сообщить SubSonic 2.2 создать условие where для другого столбца в той же таблице.


person csizo    schedule 21.05.2009    source источник
comment
Исключением (фрагмент) является [FormatException: входная строка была в неправильном формате.] System.Number.StringToNumber (String str, параметры NumberStyles, NumberBuffer & number, информация NumberFormatInfo, логическое parseDecimal) +7469351 ... [FormatException: не удалось преобразовать значение параметра из String в Decimal.] System.Data.SqlClient.SqlParameter.CoerceValue (значение объекта, MetaType destinationType) +4872143 ... [SqlQueryException: Не удалось преобразовать значение параметра из String в Decimal.] SubSonic. SqlQuery.ExecuteReader () +57 SubSonic.SqlQuery.ExecuteAsCollection () +80   -  person csizo    schedule 21.05.2009
comment
Какие типы столбцов указаны в ваших ценах? Могут ли они иметь нечисловые данные или символ «$»?   -  person Christian Loris    schedule 21.05.2009
comment
Типы столбцов в обоих столбцах являются десятичными.   -  person csizo    schedule 21.05.2009


Ответы (3)


Похоже, вы пытаетесь сравнить два столбца в своем запросе. Это невозможно в SubSonic 2.2, если вы не используете встроенный запрос:

http://subsonicproject.com/docs/Inline_Query_Tool

Вы также можете использовать функцию на основе представления или таблицы.

person Adam Cooper    schedule 21.05.2009
comment
Встроенный запрос работал. Жалко нет другого варианта, только чистый SQL. По крайней мере, это работает! Спасибо. - person csizo; 21.05.2009

Решение проблемы выше:

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();
person csizo    schedule 21.05.2009

Вы можете использовать старый объект Query (все еще включенный в 2.2) следующим образом:

Query q = new Query(Product.Schema.TableName).WHERE("OurPrice <> RetailPrice");
ProductCollection products = new ProductCollection();
products.LoadAndCloseReader(q.ExecuteReader());
person John Sheehan    schedule 21.05.2009
comment
Где возвращает ограничение, а не SqlQuery, поэтому этот код, к сожалению, не будет работать. - person Adam Cooper; 22.05.2009
comment
Извините, я думал о старом объекте Query. Я обновил свой ответ правильным примером - person John Sheehan; 22.05.2009