Я понимаю, что это частично субъективно, но мне вообще любопытно мнение сообщества, и я не смог успешно найти существующий вопрос, который решает эту проблему.
Я в несколько религиозный спор с коллегой по поводу конкретного оператора 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;
})
Предостережения:
r
является анонимным Лично я придерживаюсь мнения, что (а) предложение select не должно изменять значения, оно должно просто проецироваться. Его контраргумент в том, что он ничего не меняет, он '' s просто убедитесь, что все правильно инициализировано в результате запроса БД. Во-вторых, я думаю, что как только он начнет вдаваться в полные блоки кода и операторы возврата, пора будет определить метод или даже Func
, а не делать все это встроенным. Сложность здесь снова заключается в том, что ввод анонимен, поэтому необходимо определить тип. Но, тем не менее, мы все еще обсуждаем общий вопрос, если не конкретный.
Итак, когда лямбда-выражение делает слишком много? Где вы рисуете нечеткую линию на песке?