2012-06-13 2 views
2

У меня есть следующий 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, я получаю объявление «Invalid anonymous type member declarator». Анонимные члены типа должны быть объявлены с ошибкой членства, простое имя или членский доступ ».

Я видел другие вопросы об этой ошибке, и в этих случаях они переименовывают одно из операторов (например, 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 два времени, которое Nopt возможно

И даже если вы пишете код, как

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

это вернет логическое значение либо true, либо false ...

+2

Я не знал, что вы можете это сделать. Большое спасибо за Вашу помощь. –

3

Держите один WorkType и использовать второе трехкомпонентное условие в качестве второго выражения для первого условия:

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

Я не знал, что вы можете это сделать. Большое спасибо за Вашу помощь. –

Смежные вопросы