2009-08-11 6 views
1

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

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 

ответ

1

Вы можете использовать выражение в дозвуковой 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>(); 
+1

Так как запрос имеет только один набор скобок, вам нужно только одно выражение AndExpression –

+0

ах да. вы правы –

+1

Это было бы так. выберите * из mytable, где (prop1 = obj.prop1 или prop1 = 1) и (prop2 = obj.prop2) и (prop23 = obj.prop3) –

3

Как говорит Андра, вы можете использовать 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

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

.OpenExpression() 

и

.CloseExpression() 

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