1

我遇到了亚音速查询的问题。交易是,我有一个视图,我想查询它的数据以生成类似于以下 SQL 语句的内容:

select * 
from myView
where (col1 like '%a%' or col2 like '%a%' or col3 like '%a%') 
  and col4 = 1 and col5 = 2

但是提交给数据库的查询是这样的:

select * 
from myView
where col1 like '%a%' or col2 like '%a%' or col3 like '%a%' 
  and col4 = 1 and col5 = 2

有没有办法做类似第一个查询的事情?

请注意我使用的是 .net 2.0 和 subsonic 2.2

先感谢您。

甚至做,亚音速规则!

4

2 回答 2

4

您需要使用约束表达式WhereExpression、、、、AndExpressionOrExpressionEndExpression

“WhereExpression”(或 Or/AndExpression)之后的任何内容都将被括在括号中。您可以使用“CloseExpression()”关闭表达式,或者如果启动另一个表达式(如上面的 OrExpression)或查询结束,它将为您关闭。

另请参阅:使用嵌套 Where/And/Or

于 2009-11-16T21:07:21.927 回答
2

如果您发布您当前的代码,也许我将能够给出更具体的答案,但基本上您必须开始WhereExpression。例如这样的代码:

var usersQuery = new Select(new SubSonic.TableSchema.TableColumn[] { User.UserIdColumn, User.NameColumn })
            .From(User.Schema)            
            .WhereExpression(User.UserIdColumn.ColumnName).IsEqualTo(1).Or(User.UserIdColumn).IsEqualTo(2)
            .CloseExpression()
            .And(User.NameColumn).Like("a")

给出如下查询:

SELECT [dbo].[Users].[UserId], [dbo].[Users].[Name]
 FROM [dbo].[Users]
 WHERE ([dbo].[Users].[UserId] = @UserId0 OR [dbo].[Users].[UserId] = @UserId)
 AND [dbo].[Users].[Name] LIKE @Name
于 2009-11-16T21:09:18.257 回答