2015-09-07 72 views
1

我是LINQ的新手,我需要用CASE語句編寫LINQ語句。我試圖將以下查詢轉換爲linq。這裏1和0是布爾值。我怎樣才能實現這一目標在LINQ中寫入case語句

Select CASE [db].[table] WHEN 1 THEN 'Yes' WHEN 0 THEN 'No' END AS Options from table 

我嘗試以下,但現在工作

Options = table.Options = 1 ? "Yes" : table.Options = 0 ? "No" 
+1

_「但現在工作」_所以沒有問題了?如果你的意思是「不」,那麼它現在的工作方式是什麼,你會得到一個異常嗎?如果是這樣,什麼樣的例外? –

+1

當然這是'tables.ToList()。Select(x => x.Options == 1?「Yes」:「No」);' –

+0

'Select CASE [db]。[table]'無效SQL,因爲'[db]。[table]'是表格而不是列。 –

回答

0

請更改爲:

Options = table.Options == 1 ? "Yes" : "No"; 
+0

正如我剛纔所說我正在檢查與布爾值,在這裏我得到的錯誤常數值1不能轉換爲布爾 – Superprogrammer

+0

這是因爲你有table.Options = 1。就像我說的,改爲double =,如在「表」。選項== 1「 – chrisl08

+0

@ chrisl08將該配置添加到您的答案正文。 – LPs

0

你需要解決的表: 我會嘗試:

Options = db.table.ToList().Select(X => X.Options == 1 ? "Yes" : "No"; 
2

有你做錯了一些事情 - 一個,三元運算符的語法是

condition ? resultIfTrue : resultIfFalse 

其次,您需要使用等號(==)作比較,而不是分配(=)運算符。

因此,table.Options = 1 ? "Yes" : table.Options = 0 ? "No"

table.Options == 1 ? "Yes" : "No" 

根據您的實際LINQ提供程序所取代,有可能是一個幫手,讓你建立類似SQL的case表達式(無論是有條件的,選擇-Y型),但如果不知道你使用的是什麼,這是不可能的。如果沒有幫手,你必須去做三元操作符(這對於閱讀單個條件來說有點瘋狂,但是噢,以及......)。

例如,我的LINQ提供程序使用的語法如下:

Case(table.Options).When(1, "Yes").Else("No").End() 

Case().When(table.Options == 1, "Yes").Else("No").End() 

但同樣,唯一的標準方式是三元運算符。查看你的特定LINQ提供者的文檔,看看它是否支持類似SQL的case表達式以及如何。