2009-08-11 73 views
1

我在应用程序中使用亚音速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 

回答

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 – 2009-08-11 13:45:34

+0

啊是的。你是对的 – 2009-08-11 14:47:38

+1

这将是。 select * from mytable where(prop1 = obj.prop1 or prop1 = 1)and(prop2 = obj.prop2)and(prop23 = obj.prop3) – 2009-08-11 14:50:06

3

由于Andra说你可以使用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() 

混合那些不好的浮标和你有很多更好的控制了解事情开始和结束