如何在Subsonic 2.0中构建复杂的where子句

时间:2009-05-18 10:05:26

标签: sql subsonic

我正在尝试构建一个用于搜索引擎的查询,看起来像这样:

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 个答案:

答案 0 :(得分:3)

如果2.0中支持OpenExpression / CloseExpression,以下内容应该与您想要的非常接近:

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

答案 1 :(得分:2)

我认为你的意思是使用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);

答案 2 :(得分:1)

你可以先创建两个查询,然后在结果视图中包含之后的所有OR。你可以过滤掉AND条件。我会检查出来......但希望它能正常工作......

答案 3 :(得分:1)

我不知道SubSonic,但这会有用吗?

query = query.AND(“col3a =”+ 3 +“OR col3b =”+ 3 +“OR col3c =”+ 3);

您可以通过编程方式轻松构建子字符串。

答案 4 :(得分:0)

我发现它并不像我预期的那么简单,至少在我的版本中没有,所以我决定手动循环数据集以过滤掉上次检查的记录。 除非有更好的方法吗?

答案 5 :(得分:0)

我建议您升级到SubSonic 2.2 ... 2.1中添加的新查询功能要强大得多。