проблема дозвукового запроса - PullRequest
1 голос
/ 11 августа 2009

Я использую в приложении subsonic 2.2. Я выполняю небольшой сложный запрос, я использовал оба поля «И» и «ИЛИ» для поля, я немного запутался в том, как оно будет преобразовано в оператор SQL

MytableCollection col = DB.Select().From("mytable").Where("prop1").IsEqualTo(obj.prop1)
                .And("prop2").IsEqualTo(obj.prop2)
                .And("prop3").IsEqualTo(obj.prop3)
                .Or("prop1").IsEqualTo(1)                
                .ExecuteAsCollection<MytableCollection>();

Я хочу выполнить запрос следующим образом.

select * from mytable where (prop1=obj.prop1 or prop1=1)  and prop2=obj.prop2 and prop23=obj.prop3

Ответы [ 3 ]

3 голосов
/ 11 августа 2009

Как говорит Андра, вы можете использовать AndExpression. Это должно делать то, что вы хотите:

MytableCollection col = DB.Select().From(Mytable.Schema)
  .Where(Mytable.Columns.Prop2).IsEqualTo(obj.prop2)
  .And(Mytable.Columns.Prop3).IsEqualTo(obj.prop3)
  .AndExpression(Mytable.Columns.Prop1).IsEqualTo(obj.prop1)
  .Or(Mytable.Columns.Prop1).IsEqualTo(1)                
  .ExecuteAsCollection<MytableCollection>();

N.B. использование MyTable.Schema и MyTable.Columns выловит много проблем во время компиляции, если вы переименуете таблицы, и сохранит ошибки, вызванные опечатками

2 голосов
/ 14 августа 2009

Что-то, что ДЕЙСТВИТЕЛЬНО полезно знать, это также два следующих метода для вызова в вашем построении запросов:

.OpenExpression()

и

.CloseExpression()

Смешайте эти плохие буи, и вы сможете лучше контролировать, где все начинается и заканчивается

1 голос
/ 11 августа 2009

Вы можете использовать выражение в дозвуковой 2,2.

MytableCollection col  = new Select(Mytable.Schema)
.WhereExpression("prop1").IsEqualTo(obj.prop1).Or("prop1").IsEqualTo(1)
.AndExpression("prop2").IsEqualTo(obj.prop2)
.AndExpression("prop3").IsEqualTo(obj.prop3)
.ExecuteAsCollection<MytableCollection>();
...