2

selectステートメント内に次のSQLスニペットがあります。

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

これをLINQtoSQLに次のように変換しました。

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

どちらか一方をselectステートメントに単独で追加すると、クエリは正常に機能します。ただし、ORステートメントを追加し、selectで両方のステートメントを使用しようとすると、「無効な匿名型メンバー宣言子です。匿名型メンバーは、メンバー割り当て、単純な名前、またはメンバーアクセスで宣言する必要があります」というエラーが発生します。

このエラーに関する他の質問を見てきましたが、その場合、問題を修正するために、ステートメントの1つ(WorkType、Work_Typeなど)の名前を変更します。ただし、Worktypeは出力フィールドの名前であるため、両方をWorkTypeにする必要があります。

何か案は?

4

2 に答える 2

3

1 つWorkTypeを保持し、2 番目の三項条件を最初の条件の 2 番目の式として使用します。

WorkType = groupItem.Key.Id.Contains("Correct") ? "Corrective" : 
           (groupItem.Key.Id.Contains("Pred") ? "Preventative" : "OTHER")
于 2012-06-13T12:46:24.633 に答える
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"

ワークタイプに値を2回割り当てていますが、これは不可能です

のようにコードを書いても

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

これは真または偽のブール値を返します...

于 2012-06-13T12:46:26.693 に答える