Subsonic 亚音速查询问题
我正在应用程序中使用亚音速2.2。我在中运行了一个有点复杂的查询,我对字段使用了“And”和“Or”,我对如何将其转换为sql语句有点困惑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
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)