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

时间:2012-06-13 12:42:38

标签: 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。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

解决方案:

应该是

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 ...