В моем запросе мне нужно вернуть экземпляры класса, который не имеет конструктора по умолчанию (в частности, это в пользовательском поставщике членства, и виновником является MembershipUser)
var users = from l in context.Logins
select new MembershipUser(
Name,
l.Username, // username
l.Id, // provider key
l.MailTo,
l.PasswordQuestion,
l.Notes.FirstOrDefault().NoteText,
l.IsApproved,
l.IsLockedOut,
l.CreatedOn,
l.LastLoginOn.HasValue ? l.LastLoginOn.Value : DateTime.MinValue,
l.LastActivityOn.HasValue ? l.LastActivityOn.Value : DateTime.MinValue,
DateTime.MinValue,
l.LastLockedOutOn.HasValue ? l.LastLockedOutOn.Value : DateTime.MinValue
);
является синтаксически правильным, но приводит к ошибке времени выполнения, так как в LINQ to Entities поддерживаются только беспараметрические конструкторы и инициализаторы.
Обновление: в качестве обходного пути я сейчас переношу выбор в List (который разрешает выполнение выражения запроса)затем я могу выбрать нового пользователя MembershipUser из этого списка.
var users = (from l in context.Logins
select new { login = l }).ToList().Select(u => new MembershipUser (
Name,
u.login.Username, // username
u.login.Id, // provider key
u.email.MailTo,
u.login.PasswordQuestion,
u.login.Notes.FirstOrDefault().NoteText,
u.login.IsApproved,
u.login.IsLockedOut,
u.login.CreatedOn,
u.login.LastLoginOn.HasValue ? u.login.LastLoginOn.Value : DateTime.MinValue,
u.login.LastActivityOn.HasValue ? u.login.LastActivityOn.Value : DateTime.MinValue,
DateTime.MinValue,
u.login.LastLockedOutOn.HasValue ? u.login.LastLockedOutOn.Value : DateTime.MinValue
);