Назначение вызова функции анонимному полю в c#

#c# #linq

#c# #linq

Вопрос:

Я возвращаю анонимный тип из моего запроса linq:

 select new {
Exists = true,
Code = new Func<string,string>((string param) => {
                                      if (param == "T")
                                          return "Tab";
                                      if (param == "E")
                                          return "Eub";
                                      if (param == "C")
                                          return "GTW";
                                      if (param == "X")
                                          return "XUX";
                                      return "";
}
}
  

Ошибка:

Лямбда-выражение с телом инструкции не может быть преобразовано в дерево выражений

выдается, но это мне ни о чем не говорит.

Вопрос: Как справиться с этим без создания новой неанонимной функции?

Комментарии:

1.Это говорит вам, что вы не можете использовать блоки кода внутри выражений. Блок кода — это операторы if / return внутри { } после => .

2. Зачем использовать оператор select для получения лямбда-выражения?

3. @IvanStoev Как справиться с этим, не создавая новую неанонимную функцию?

Ответ №1:

Зачем использовать Func<string,string> ?

 something.Select(x => new {
Exists = true,
Code = x.param == "T" ? "Tab" :
       x.param == "E" ? "Eub" :
       x.param == "C" ? "GTW" :
       x.param == "X" ? "XUX" : ""
});
  

Комментарии:

1. И откуда param тогда берется?

2. к сожалению, это решение выглядит не очень хорошо : (

3. где это происходило раньше?

4. параметр берется из запроса linq

5. @justme почему это не выглядит красиво? это быстрее, читабельнее, короче,…