2013-12-19 69 views
2

我在SQL Server中的查詢:實體框架ISNULL在條件

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

我怎樣才能做到這一點在實體框架?

編輯: 噢對不起我的代碼是象

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

你只需要'WHERE t.Status ='CO''。 'ISNULL'不影響語義,並使其不受影響。 –

+0

@MartinSmith是的我明白了,但我錯誤地提出了問題,因爲WHERE ISNULL(t.Status,'')='CO',實際上它是在哪裏ISNULL(t.Status,'')='' –

+0

這仍然是不可糾正的。你應該只使用'WHERE t.Status =''或t.Status IS NULL' –

回答

9

嘗試類似

MyTable.Where(T =>(t.Status ?? 「」)== 「CO」)

+0

這裏WHERE t.Status ='CO'應該沒問題。爲什麼你需要檢查? (空值) ? –

+0

雖然沒有必要這樣做,但這是OP所要求的。我認爲它不會產生'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'