2012-06-13 105 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

我不知道你可以做到這一點。非常感謝您的幫助。 –

相關問題