我在应用中使用亚音速2.2。我正在运行一个复杂的查询,我已经使用了“And”和“Or”作为字段,我对它将如何被翻译成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
答案 0 :(得分: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将在编译时捕获很多问题,并将保存错误输入引起的错误
答案 1 :(得分:2)
在您的查询构建中调用以下两种方法非常有用:
.OpenExpression()
和
.CloseExpression()
混合那些不好的浮标,你可以更好地控制知道事情的起点和终点
答案 2 :(得分: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>();