首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚声查询条件A与((条件B与条件C) OR (条件D与条件E与条件F)

亚声查询条件A与((条件B与条件C) OR (条件D与条件E与条件F)
EN

Stack Overflow用户
提问于 2012-02-03 03:24:32
回答 3查看 1.2K关注 0票数 0

我几乎要把头发拔出来了,因为我不知道如何在SubSonic 2.2中执行以下T-SQL查询:

代码语言:javascript
复制
SELECT  SalesRep, Location, InvoiceNumber, PONumber, POReceivedOn, SurgeryDate, Surgeon
FROM    dbo.vSalesRepCommissionGrouped AS vsrcg
WHERE   UserID IN ( 5, 6, 20 )
    AND ( ( SurgeryDate >= '2012-01-01'
            AND SurgeryDate <= '2012-01-31'
          )
          OR ( SurgeryDate >= '2011-12-01'
               AND SurgeryDate <= '2011-12-31'
               AND POReceivedOn >= '2012-01-01'
             )
        )
ORDER BY SurgeryDate ASC

我至少用了10种不同的方法尝试了下面的SubSonic精选,但我不能得到相同的结果。

代码语言:javascript
复制
new Select("SalesRep, Location, InvoiceNumber, PONumber, POReceivedOn, SurgeryDate, Surgeon")
                    .From(VSalesRepCommissionGrouped.Schema)
                    .WhereExpression("UserID").In(new[] { 5, 6, 20 })
                    .AndExpression("SurgeryDate").IsGreaterThanOrEqualTo(BeginDate).And("SurgeryDate").IsLessThanOrEqualTo(EndDate)
                    .Or("SurgeryDate").IsGreaterThanOrEqualTo(BeginDate.AddMonths(-1)).And("SurgeryDate").IsLessThanOrEqualTo(
                        EndDate.AddMonths(-1)).And("POReceivedOn").IsGreaterThanOrEqualTo(BeginDate).CloseExpression()
                    .OrderAsc("SurgeryDate");

有人能给我指个方向吗?

谢谢!-安德鲁

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-03 04:41:14

实际上,您的select应该可以,只需使用Where而不是WhereExpression (您得到的是什么SubSonic?)。

我还推荐使用SubSonic的强类型列,而不是魔术字符串-这是使用SubSonic的优点之一。

票数 1
EN

Stack Overflow用户

发布于 2012-03-02 20:36:02

在这一点上,我通常使用SqlConnection对象作为直接传递SQL。我不确定SubSonic 2能胜任这些错综复杂的工作。

我也不认为您在subsonic查询中使用的括号实际上有任何作用。它们可能会影响标准的解析顺序,但不会影响最终SQL语句的构造(至少不会以可控的方式)。

SubSonic 3引入了AndAlso操作符来模拟括号,但即使这样也是相当粗糙的。LINQ (在SubSonic 3中支持)可能是可靠地做到这一点的唯一方法。

票数 1
EN

Stack Overflow用户

发布于 2012-02-03 04:21:06

我现在无法测试,但请查看此查询是否有效:

代码语言:javascript
复制
new Select("SalesRep, Location, InvoiceNumber, PONumber, POReceivedOn, SurgeryDate, Surgeon")
                    .From(VSalesRepCommissionGrouped.Schema)
                    .WhereExpression("SurgeryDate").IsGreaterThanOrEqualTo(BeginDate)
                              .And("SurgeryDate").IsLessThanOrEqualTo(EndDate)
                     .OrExpression("SurgeryDate").IsGreaterThanOrEqualTo(BeginDate.AddMonths(-1))
                              .And("SurgeryDate").IsLessThanOrEqualTo(EndDate.AddMonths(-1))
                              .And("POReceivedOn").IsGreaterThanOrEqualTo(BeginDate)
                    .AndExpression("UserID").In(new[] { 5, 6, 20 })
                    .OrderAsc("SurgeryDate");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9118590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档