亚音速查询问题

时间:2009-08-11 12:27:17

标签: subsonic

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

3 个答案:

答案 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>();