Недавно я столкнулся с проблемой, которая заняла некоторое время, чтобы понять. У меня есть такой кусок кода:По умолчаниюIfEmpty особенности поведения
private Member FindMemberByName(string name)
{
var member =
this.db.Members.AsEnumerable()
.Where(d => d.ShortName == name)
.DefaultIfEmpty(this.CreateNewMember(name))
.First();
return member;
}
private Member CreateNewMember(string name)
{
return this.db.Members.Add(new Member { Name = name });
}
Я ожидал FindMemberByName() для возврата существующего объекта, а в случае отсутствия создать новый объект и вернуть один.
Однако я заметил, что CreateNewMember() был вызван даже тогда, когда существующее имя было передано.
Я предпочел бы использовать шаблон 'FirstOrDefault() ?? CreateNewMember', который представляет собой микроразделение проблем. –