Дозвуковой запрос: проблема с произведенным запросом - PullRequest
1 голос
/ 16 ноября 2009

У меня проблема с дозвуковым запросом. Дело в том, что у меня есть представление, и я хочу запросить его данные, чтобы получить что-то вроде следующего оператора 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 и дозвуковую 2.2

Заранее спасибо.

Даже делай, Дозвуковые правила!

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

Вам необходимо использовать Выражения ограничения : WhereExpression, AndExpression, OrExpression, EndExpression.

Все, что следует за «WhereExpression» (или Or / AndExpression), будет заключено в скобки. Вы можете закрыть выражение с помощью «CloseExpression ()», или оно будет закрыто для вас, если другое будет запущено (как в OrExpression выше) или если запрос завершится.

Также см .: Использование Nested Где / И / Или .

2 голосов
/ 17 ноября 2009

Если вы опубликуете свой текущий код, возможно, я смогу дать более конкретный ответ, но в основном вы должны начать 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
...