我有以下查询:
SELECT FROM tblMailToSend
WHERE (DateToSend < @dateToSend OR DateToSend IS NULL) AND DateSent IS NULL
@dateToSend作为参数传递
我正在尝试将此转换为linq to sql query。
我有:
db.MailToSend.Where(m => m.DateToSend == null || m.DateToSend <= dateToSend)
.Where(m => m.DateSent == null)
但是这给出了以下SQL:
SELECT *
FROM [dbo].[tblMailToSend] AS [t0]
WHERE ([t0].[DateSent] IS NULL) AND (([t0].[DateToSend] IS NULL) OR ([t0].[DateToSend] <= @p0))
哪个会给出错误的结果......
我需要哪些Linq查询才能匹配正确的(第一个)sql?
答案 0 :(得分:2)
试试这个:
db.MailToSend.Where(m => (m.DateToSend == null || m.DateToSend <= dateToSend) && m.DateSent == null);
答案 1 :(得分:2)
唯一不同的是,你的linq语句中使用的是m.DateToSend <= dateToSend
而不是第一个sql语句中的strict。所以改变这一点,一切都应该是正确的。
答案 2 :(得分:1)
可能是一个错字,但你的SQL正在使用&lt;而你的Linq正在使用&lt; =。除此之外,您的查询看起来应该产生相同的结果。
答案 3 :(得分:0)
在Linq问题中,您有DateToSend&lt; = @DateToSend(更少或相等),但在SQL查询中,您只需检查&lt;