В чистом Expression
(в .NET 3.5) самое близкое, что вы можете получить, это составное условие:
Expression<Func<int, string>> func = x =>
x == 1 ? "abc" : (
x == 2 ? "def" : (
x == 3 ? "ghi" :
"jkl")); /// yes, this is ugly as sin...
Не весело, особенно когда это становится сложным. Если вы имеете в виду лямда-выражение с телом оператора (только для использования с LINQ-to-Objects), тогда внутри скобок все допустимо:
Func<int, string> func = x => {
switch (x){
case 1: return "abc";
case 2: return "def";
case 3: return "ghi";
default: return "jkl";
}
};
Конечно, вы можете получить работу на стороне; например, LINQ-to-SQL позволяет сопоставить скалярную пользовательскую функцию (в базе данных) с методом в контексте данных (который фактически не используется) - например:
var qry = from cust in ctx.Customers
select new {cust.Name, CustomerType = ctx.MapType(cust.TypeFlag) };
где MapType
- UDF, выполняющий работу на сервере БД.