在我的查詢中,我需要返回沒有默認構造函數的類的實例(具體而言,這是在自定義的成員資格提供程序中,並且是的MembershipUser罪魁禍首)有什麼可能的解決方法是「只有無參數的構造函數支持Linq到Entites」
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
);
是syntacitally正確的,但會導致運行時錯誤,因爲只有參數構造函數初始化和LINQ中支持到實體。
更新:作爲解決方法我現在將選擇帶入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
);
你不需要浪費時間和內存上通過'ToList物化到一個'List'()'。只需要解決一個斷開'IEnumerable'使用'AsEnumerable()'就像Gabe回答。 –
Aaronaught
2010-06-13 13:37:30