【发布时间】:2011-03-19 04:35:56
【问题描述】:
我尝试在 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() 返回不正确的记录计数,因为记录可能匹配多个表达式。我将尝试重新安排逻辑并创建一个新的 TSQL 版本,它可以帮助我在 LINQ 中找到解决方案。
欢迎提出想法。
【问题讨论】:
-
在你说 SQL 版本令人困惑和丑陋之前先写出 LINQ 替代方案:P
-
我可能错过了,但我没有看到您在 CompanyList 上实际使用您的加入...
-
CompanyList 上的联接是限制性联接。数据并不像应有的那么干净,所以我加入了表格以确保只有好东西才能回来。
-
啊。凉爽的。我必须检查一下,但我认为在 WHERE 子句中添加“AND r.company IN (SELECT company FROM CompanyList)”可能会更高效,但它可能是一个清洗...
标签: c# linq-to-sql tsql where-clause