2012-06-13 186 views
2

我有一个SELECT语句中的下列SQL代码片段:LINQ:无效的匿名类型成员声明。匿名类型的成员必须有一个成员赋值,简单名称或成员访问来声明

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

我已经翻译成LINQ到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。

任何想法?

+1

我们可以整个LINQ查询吗? – bluevector

回答

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两个时间是n工作可能

即使你写这样

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

代码这将返回布尔值,无论是真或假...

+2

我不知道你能做到这一点。非常感谢您的帮助。 –

3

保持一个WorkType并使用第二三元条件作为第二表达针对第一条件:

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

我不知道你可以做到这一点。非常感谢您的帮助。 –