2009-08-11 91 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() 

混合那些不好的浮標和你有很多更好的控制瞭解事情開始和結束