Как я могу построить комплекс, где пункт в Subsonic 2.0 - PullRequest
1 голос
/ 18 мая 2009

Я пытаюсь создать запрос для поисковой системы, который будет выглядеть так:

SELECT * FROM sometable
WHERE col1 = 1
AND   col2 = 2
AND   (col3a = 3 OR col3b = 3 OR col3c = 3)

Я думаю, что код ниже будет работать:

SubSonic.Query query = new SubSonic.Query("sometable");
query = query.WHERE("col1", 1);
query = query.WHERE("col2", 2);
query = query.AND("col3a = " + 3).
  OR("col3b = " + 3).
  OR("col3c = " + 3);

но это не так, как это приводит к чему-то вроде этого:

SELECT * FROM sometable
WHERE col1 = 1
AND   col2 = 2
AND   col3a = 3
OR    col3b = 3
OR    col3c = 3

Как мне создать нужный мне запрос?

Ответы [ 6 ]

3 голосов
/ 18 мая 2009

Следующее должно быть очень близко к тому, что вы хотите, если OpenExpression / CloseExpression поддерживается в 2.0:

SubSonic.Query query = new SubSonic.Query("sometable");
  .WHERE("col1", 1);
  .AND("col2", 2);
  .AND("col3a = " + 3).
  .OpenExpression()
    .OR("col3b = " + 3).
    .OR("col3c = " + 3);
  .CloseExpression()
2 голосов
/ 18 мая 2009

Я думаю, что вы должны использовать WhereExpression / AndExpression / OrExpression для вложения выражений при чтении документации, но я никогда не использовал это, так что не могу сказать наверняка. Попробуйте ниже и посмотрите, работает ли он

SubSonic.Query query = new SubSonic.Query("sometable");
query = query.WHEREEXPRESSION("col1", 1);
query = query.AND("col2 = " + 2);
query = query.ANDEXPRESSION("col3a = " + 3).
  OR("col3b = " + 3).
  OR("col3c = " + 3);
1 голос
/ 18 мая 2009

Я не знаю SubSonic, но будет ли это работать?

query = query.AND ("col3a =" + 3 + "ИЛИ col3b =" + 3 + "ИЛИ col3c =" + 3);

Вы можете легко построить эту подстроку программно.

1 голос
/ 18 мая 2009

Сначала вы можете создать два запроса, которые будут включать в себя все ИЛИ после этого из полученного представления. Вы можете отфильтровать и выполнить условие.

0 голосов
/ 02 июня 2009

Я бы порекомендовал вам перейти на SubSonic 2.2 ... Новые функции запросов, добавленные в 2.1, намного мощнее.

0 голосов
/ 18 мая 2009

Я вижу, что это не так просто, как я ожидал, по крайней мере, не в той версии, которая у меня есть, поэтому я решил вручную перебрать DataSet для фильтрации записей из последней проверки. Если нет лучшего способа?

...