2013-12-19 3 views
2

У меня есть запрос в SQL Server:Entity Framework ISNULL в тех случаях, когда условие

SELECT * FROM MyTable t 
WHERE ISNULL(t.Status,'') = '' 

Как я могу это сделать в Entity Framework?

EDIT: О К сожалению мой код был как

WHERE ISNULL(t.Status,'') = '' 
+4

Вам просто нужно 'WHERE t.Status = 'CO''. 'ISNULL' не влияет на семантику и делает ее непригодной. –

+0

@MartinSmith Да, я понимаю это, но я ошибочно представил вопрос как ГДЕ ISNULL (t.Status, '') = 'CO', на самом деле это было ГДЕ ISNULL (t.Status, '') = '' –

+0

Это все еще невозможно. Вы должны просто использовать 'WHERE t.Status = '' ИЛИ ​​t.Status IS NULL' –

ответ

9

Попробуйте что-то вроде

MyTable.Where (т => (t.Status ?? "") == "CO")

+0

Это WHERE t.Status = 'CO' должно быть хорошо. Почему вам нужно проверить? (ноль) ? –

+0

Хотя это необязательно, это то, что запросил ОП. Я не думаю, что он генерирует «ISNULL», но «COALESCE (...)», но это не имеет значения. – Silvermind

+0

Это защита от распространения NULL. В этом примере OP может сойти с рук, но это похоже на лучшую практику. –

4

Хотя вопрос в порядке, логика не звучит. Потому что, если значение равно CO, оно никогда не может быть равно NULL или ''. В этом случае вы можете просто легко назвать это так:

SQL:

SELECT * FROM MyTable t 
WHERE t.Status = 'CO' 

Linq:

var items = (from t in db.MyTable 
      where t.Status == "CO" 
      select t); 

Однако, если бы это нужно иметь значение по умолчанию, когда NULL и сравнить к этому значению это будет иметь больший смысл (см. пример):

SQL:

SELECT * FROM MyTable t 
WHERE ISNULL(t.Status, 'CO') = 'CO' 

Linq:

var items = (from t in db.MyTable 
      where (t.Status ?? "CO") == "CO" 
      select t); 

Это даст вам все пункты, где t.Status является NULL или равна CO. Это, конечно, просто пример.

Примечание: Сгенерированный sql, вероятно, будет немного отличаться, но результат будет таким же. Это могло бы выглядеть примерно так:

SELECT * FROM MyTable t 
WHERE COALESCE(t.Status, 'CO') = 'CO' 
Смежные вопросы