Дозвуковой запрос: проблема с созданным запросом

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

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

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


person smartins    schedule 16.11.2009    source источник
comment
не могли бы вы опубликовать свой текущий код?   -  person empi    schedule 16.11.2009


Ответы (2)


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

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

См. Также: Использование вложенных Where / And / Or.

person Forgotten Semicolon    schedule 16.11.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
person empi    schedule 16.11.2009