我有一个令人困惑的SQL选择语句(难看),我试图写在LINQ中。我正在努力获取将执行的单个统计信息,而不是将预先选定的数据放入必须发送回服务器的列表中。复杂Linq到SQL在条件帮助
DECLARE @StartDate DATETIME ;
DECLARE @EndDate DATETIME ;
SET @pStartDate = '20100501'
SET @pEndDate = '20100531'
SELECT r.company ,r.trandate ,r.currency ,r.account ,r.credit ,r.debit
FROM dbo.Register r
INNER JOIN dbo.CompanyList c ON r.company = c.company
WHERE
r.trandate BETWEEN @pStartDate AND @pEndDate
AND LEN(r.currency) > 0
AND (
(r.account = 'XXX-ZZZ')
OR
(LEFT(r.account, 3) IN (SELECT LEFT(code, 3) FROM dbo.investments))
OR
(r.account IN (
SELECT account FROM dbo.CompanyInfo WHERE company = r.company
AND ((dateclosed IS NULL)
OR dateclosed >= @pStartDate)))
)
这是一个包含问题代码的示例 - 带有三个OR表达式的WHERE子句。我试过使用三个不同的查询,然后concat()或union()返回不正确的reccord计数,因为记录可能匹配多个表达式。我将尝试重新排列逻辑并创建一个新的TSQL版本,这可能会帮助我在LINQ中找到解决方案。
想法欢迎。
写出LINQ替代你说的SQL版本是令人困惑的和丑陋的面前:P – Andomar 2010-07-21 19:21:02
我可能已经错过了,但我没有看到任何地方,你实际使用您的加盟对CompanyList ... – 2010-07-21 19:36:34
的加入CompanyList是一种限制性连接。数据并不像应该那样干净,所以我加入到试图确保只有好东西回来的表格中。 – secoast 2010-07-21 21:17:35