【问题标题】:LINQ: Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member accessLINQ:无效的匿名类型成员声明器。匿名类型成员必须使用成员分配、简单名称或成员访问来声明
【发布时间】:2012-06-13 12:42:38
【问题描述】:

我在 select 语句中有以下 SQL sn-p:

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。

有什么想法吗?

【问题讨论】:

  • 能否请我们完成整个 LINQ 查询?

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


【解决方案1】:

解决方案:

应该是

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");

这将返回布尔值 true 或 false...

【讨论】:

  • 我不知道你能做到这一点。非常感谢您的帮助。
【解决方案2】:

保留一个WorkType,并使用第二个三元条件作为第一个条件的第二个表达式:

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

【讨论】:

  • 我不知道你能做到这一点。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多