Простой SQL-запрос к LINQ - PullRequest
       18

Простой SQL-запрос к LINQ

0 голосов
/ 16 февраля 2010

У меня следующий запрос:

SELECT FROM tblMailToSend
WHERE (DateToSend < @dateToSend OR DateToSend IS NULL) AND DateSent IS NULL

@ dateToSend передается как параметр

Я пытаюсь преобразовать это в запрос linq в sql.

У меня есть:

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?

Ответы [ 4 ]

2 голосов
/ 16 февраля 2010

Единственное отличие состоит в том, что в вашем операторе linq вы используете m.DateToSend <= dateToSend вместо строгого меньше, чем в вашем первом операторе SQL. Так что измени это и все должно быть правильно.

2 голосов
/ 16 февраля 2010

Попробуйте это:

db.MailToSend.Where(m => (m.DateToSend == null || m.DateToSend <= dateToSend) && m.DateSent == null);
1 голос
/ 16 февраля 2010

Может быть опечатка, но ваш SQL использует <, в то время как ваш Linq использует <=. Кроме того, ваши запросы выглядят так, как будто они должны давать одинаковые результаты. </p>

0 голосов
/ 16 февраля 2010

В Linq-вопросе у вас DateToSend <= @DateToSend (меньше или равно), но в SQL-запросе вы просто отмечаете <</p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...