我几乎要把头发拔出来了,因为我不知道如何在SubSonic 2.2中执行以下T-SQL查询:
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精选,但我不能得到相同的结果。
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");有人能给我指个方向吗?
谢谢!-安德鲁
发布于 2012-02-03 04:41:14
实际上,您的select应该可以,只需使用Where而不是WhereExpression (您得到的是什么SubSonic?)。
我还推荐使用SubSonic的强类型列,而不是魔术字符串-这是使用SubSonic的优点之一。
发布于 2012-03-02 20:36:02
在这一点上,我通常使用SqlConnection对象作为直接传递SQL。我不确定SubSonic 2能胜任这些错综复杂的工作。
我也不认为您在subsonic查询中使用的括号实际上有任何作用。它们可能会影响标准的解析顺序,但不会影响最终SQL语句的构造(至少不会以可控的方式)。
SubSonic 3引入了AndAlso操作符来模拟括号,但即使这样也是相当粗糙的。LINQ (在SubSonic 3中支持)可能是可靠地做到这一点的唯一方法。
发布于 2012-02-03 04:21:06
我现在无法测试,但请查看此查询是否有效:
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");https://stackoverflow.com/questions/9118590
复制相似问题