c# - LINQ:无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问来声明

标签 c# sql-server linq linq-to-sql

我在 select 语句中有以下 SQL 片段:

CASE 
WHEN wot.id LIKE '%Correct%' THEN 'Corrective'
WHEN wot.id LIKE '%Pred%' THEN 'Preventative'
ELSE 'OTHER'
END
AS worktype

我已将其翻译成 LINQ to SQL,如下所示:

WorkType = groupItem.Key.Id.Contains("Correct") ? "Corrective" : "OTHER" || 
WorkType = groupItem.Key.Id.Contains("Pred") ? "Preventative" : "OTHER"

如果我将一个或另一个单独添加到 select 语句中,则查询工作正常。但是,当我添加 OR 语句并尝试在 select 中同时使用这两个语句时,出现“无效的匿名类型成员声明符。必须使用成员分配、简单名称或成员访问来声明匿名类型成员”错误。

我已经看到有关此错误的其他问题,在这些情况下,他们重命名其中一个语句(例如 WorkType、Work_Type)以解决问题。但是,Worktype 是我的输出字段的名称,因此我需要将两者都设置为 WorkType。

有什么想法吗?

最佳答案

解决方案:

应该是

WorkType = groupItem.Key.Id.Contains("Correct") ? "Corrective" :
    (groupItem.Key.Id.Contains("Pred") ? "Preventative" : "OTHER");

问题:

因为你的代码有问题

WorkType = groupItem.Key.Id.Contains("Correct") ? "Corrective" : "OTHER" ||  
WorkType = groupItem.Key.Id.Contains("Pred") ? "Preventative" : "OTHER"

您两次为工作类型赋值,这是不可能的

即使你写了这样的代码

WorkType = (groupItem.Key.Id.Contains("Correct") ? "Corrective" : "OTHER") ||  
          ( groupItem.Key.Id.Contains("Pred") ? "Preventative" : "OTHER");

这将返回 bool 值 true 或 false...

关于c# - LINQ:无效的匿名类型成员声明符。匿名类型成员必须使用成员分配、简单名称或成员访问来声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015065/

相关文章:

c# - 输出(C# 中的可空类型)

sql - 使用 SQLCMD.exe 实用程序在不同的凭据下运行 T-SQL 脚本

c# - 使用C#同步MSSQL和mysql数据库

c# - 在 LINQ 中通过子属性排序父对象

c# - 使用 LINQ to Entities 的时间跨度总和

c# - MVC 使用 CSHTML href

c# - Guid 应包含 32 位数字和 4 个破折号

c# - RichTextBox 不处理换行符/回车符

c# - 本地数据库登录失败

sql-server - 在 Linq 中查询速度慢,在 LinqPad、SQL Management Studio 和 SQL Profiler 中查询速度快