#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 почему это не выглядит красиво? это быстрее, читабельнее, короче,…