我是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"
我是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"
请更改为:
Options = table.Options == 1 ? "Yes" : "No";
正如我刚才所说我正在检查与布尔值,在这里我得到的错误常数值1不能转换为布尔 – Superprogrammer
这是因为你有table.Options = 1。就像我说的,改为double =,如在“表”。选项== 1“ – chrisl08
@ chrisl08将该配置添加到您的答案正文。 – LPs
你需要解决的表: 我会尝试:
Options = db.table.ToList().Select(X => X.Options == 1 ? "Yes" : "No";
有你做错了一些事情 - 一个,三元运算符的语法是
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
表达式以及如何。
_“但现在工作”_所以没有问题了?如果你的意思是“不”,那么它现在的工作方式是什么,你会得到一个异常吗?如果是这样,什么样的例外? –
当然这是'tables.ToList()。Select(x => x.Options == 1?“Yes”:“No”);' –
'Select CASE [db]。[table]'无效SQL,因为'[db]。[table]'是表格而不是列。 –