Дозвуковой: сравнение двух столбцов вместо входного параметра - PullRequest
3 голосов
/ 28 октября 2008

с можно сделать следующее в дозвуковом.

ВЫБРАТЬ * ИЗ ТАБЛИЦЫ1

ГДЕ Столбец1> Столбец2 или Столбец1 <Столбик3 </p>

Все примеры, которые я видел, теперь предполагают, что вы передаете значение предложению where. Я пытаюсь сделать это без создания представления.

Спасибо

Ответы [ 4 ]

2 голосов
/ 04 апреля 2009

Если он у нас в стеке, я не могу его найти :). Было бы неплохо добавить хотя бы :). На данный момент вы можете использовать встроенный запрос, чтобы просто выполнить написанное вами утверждение (оно требует прямого SQL). Я знаю, что это плохо, но ...

Рик - если бы ты заставил это работать, мне было бы интересно, как это сделать. Col2 попытается проанализировать тип, и ваш запрос не будет выполнен.

0 голосов
/ 01 января 2011

Если вы используете SubSonic 2.1 / 2.2 и у вас есть доступ к источнику, вы можете применить следующее:

SubSonic / SQLQuery / Constraint.cs
(Добавить новую недвижимость)

public bool ParameterIsTableColumn
{
    get { return ParameterValue is TableSchema.TableColumn ;  }
}

SubSonic / SQLQuery / SqlQuery.cs
(Внутри метода SetConstraintParams)

foreach(Constraint c in qry.Constraints)
{
    if (c.ConstructionFragment == "##" || c.ParameterIsTableColumn)
        continue;

SubSonic / SQLQuery / SqlGenerators / ANSISqlGenerator.cs
(Внутри метода BuildConstraintSQL)

//add this at the top of the method
int currentConstraintIndex = query.Constraints.IndexOf(c);

///the statement 'c.ParameterName = ' occurs four times in this method
///use this line the first three times, and a slight variation of it on the fourth
c.ParameterName = (c.ParameterIsTableColumn ? ((TableSchema.TableColumn)c.ParameterValue).QualifiedName : String.Concat(col.ParameterName, currentConstraintIndex));
0 голосов
/ 04 апреля 2009

Да, это так.

Dim TableList As Generic.List(Of Database.Table1) = _
 New SubSonic.Select().From("Table1"). _
 Where("Col1").IsGreaterThan("Col2"). _
 Or("Col1").IsLessThan("Col3").ExecuteTypedList(Of Database.Table1)()
0 голосов
/ 29 октября 2008

Похоже, что эта функциональность отсутствует в текущей версии, но была представлена ​​в коде для следующего выпуска.

...