Я понимаю, что это частично субъективно, но мне, как правило, любопытно мнение сообщества, и я не смог успешно найти существующий вопрос, который решает эту проблему.
Я нахожусь в несколько религиозных дебатах ссотрудник по конкретному оператору Select в запросе L2EF.
.Select(r =>
{
r.foo.Bar = r.bar;
r.foo.Bar.BarType = r.Alpha;
if (r.barAddress != null)
{
r.foo.Bar.Address = r.barAddress;
r.foo.Bar.Address.State = r.BarState;
}
if (r.baz != null)
{
r.foo.Bar.Baz = r.baz;
if (r.bazAddress != null)
{
r.foo.Bar.Baz.Address = r.bazAddress;
r.foo.Bar.Baz.Address.State = r.BazState;
}
}
return r.foo;
})
Предостережения:
- Это Linq-to-Entities
- Это после работа в БД выполнена и возвращена
- Входной параметр
r
является анонимным
Лично я считаю, что (а)предложение select не должно изменять значения, оно должно просто проецироваться.Его контраргумент в том, что он ничего не меняет, он просто следит за тем, чтобы все правильно инициализировалось в результате запроса к БД.Во-вторых, я думаю, что как только он начнет входить в блоки полного кода и операторы возврата, пора определить метод или даже Func<T, U>
и не делать все это встроенным.Сложность здесь, опять же, ввод анонимный, поэтому тип должен быть определен.Но, тем не менее, мы все еще обсуждаем общий смысл, если не конкретный.
Итак, когда лямбда-выражение делает слишком много?Где вы рисуете нечеткую линию на песке?