Subsonic 亚音速查询问题

Subsonic 亚音速查询问题,subsonic,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(o

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

可以在亚音速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>();
MytableCollection col=new Select(Mytable.Schema)
其中,表达式(“prop1”).IsEqualTo(obj.prop1)。或(“prop1”).IsEqualTo(1)
.AndExpression(“prop2”).IsEqualTo(obj.prop2)
.AndExpression(“prop3”).IsEqualTo(obj.prop3)
.ExecuteAsCollection();

您可以在亚音速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>();
MytableCollection col=new Select(Mytable.Schema)
其中,表达式(“prop1”).IsEqualTo(obj.prop1)。或(“prop1”).IsEqualTo(1)
.AndExpression(“prop2”).IsEqualTo(obj.prop2)
.AndExpression(“prop3”).IsEqualTo(obj.prop3)
.ExecuteAsCollection();

正如安德拉所说,您可以使用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>();
MytableCollection col=DB.Select().From(Mytable.Schema)
.Where(Mytable.Columns.Prop2).IsEqualTo(obj.Prop2)
.和(Mytable.Columns.Prop3).IsEqualTo(obj.Prop3)
.AndExpression(Mytable.Columns.Prop1).IsEqualTo(obj.Prop1)
.或(Mytable.Columns.Prop1).IsEqualTo(1)
.ExecuteAsCollection();

注意:如果重命名表格,使用MyTable.Schema和MyTable.Columns将在编译时发现许多问题,并将保存由键入错误引起的错误,正如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>();
MytableCollection col=DB.Select().From(Mytable.Schema)
.Where(Mytable.Columns.Prop2).IsEqualTo(obj.Prop2)
.和(Mytable.Columns.Prop3).IsEqualTo(obj.Prop3)
.AndExpression(Mytable.Columns.Prop1).IsEqualTo(obj.Prop1)
.或(Mytable.Columns.Prop1).IsEqualTo(1)
.ExecuteAsCollection();

注意:如果重命名表格,使用MyTable.Schema和MyTable.Columns将在编译时发现许多问题,并将保存由于键入错误而导致的错误。需要了解的是,在查询生成中调用以下两种方法:

.OpenExpression()


混合使用这些不好的浮标,你就可以更好地控制事情的开始和结束

真正有用的是了解以下两种方法,它们可以在你的查询构建中调用:

.OpenExpression()


混合使用这些不好的浮标,您可以更好地控制事情的开始和结束位置

,因为查询只有一组括号,您应该只需要一个括号,表达式如下所示。从mytable中选择*,其中(prop1=obj.prop1或prop1=1)和(prop2=obj.prop2)和(prop23=obj.prop3),因为查询只有一组括号,所以您应该只需要一个括号,表达式如下所示。从mytable中选择*,其中(prop1=obj.prop1或prop1=1)和(prop2=obj.prop2)以及(prop23=obj.prop3)