2015-09-07 47 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表达式以及如何。