Entity framework “有哪些可能的解决办法?”;Linq to Entites中只支持无参数构造函数“;
在我的查询中,我需要返回没有默认构造函数的类的实例(特别是在自定义成员资格提供程序中,MembershipUser是罪魁祸首) 语法正确,但会导致运行时错误,因为LINQ to实体中只支持无参数构造函数和初始值设定项 更新:作为一种解决方法,我现在将选择引入一个列表(它解析查询表达式的运行),然后我可以从该列表中选择新的MembershipUserEntity framework “有哪些可能的解决办法?”;Linq to Entites中只支持无参数构造函数“;,entity-framework,linq-to-entities,Entity Framework,Linq To Entities,在我的查询中,我需要返回没有默认构造函数的类的实例(特别是在自定义成员资格提供程序中,MembershipUser是罪魁祸首) 语法正确,但会导致运行时错误,因为LINQ to实体中只支持无参数构造函数和初始值设定项 更新:作为一种解决方法,我现在将选择引入一个列表(它解析查询表达式的运行),然后我可以从该列表中选择新的MembershipUser var users = (from l in context.Logins select new { login = l }).ToList
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
);
我认为问题在于,您需要从LINQ转义到实体,然后转到LINQ到对象,这允许任意方法调用。
AsEnumerable
扩展方法可以为您实现这一点。
这个怎么样:
var users = from l in context.Logins.AsEnumerable()
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 ?? DateTime.MinValue,
l.LastActivityOn ?? DateTime.MinValue,
DateTime.MinValue,
l.LastLockedOutOn ?? DateTime.MinValue
);
否,因为“LINQ to Entities无法识别该方法,并且该方法无法转换为存储表达式”现在完全有意义了。谢谢。这是否意味着任何
where
部分都不会转换为SQLWHERE子句?它会不会把所有的登录都拉下来,然后LINQ->Objects接管where
过滤?SeanHanley:你把所有的过滤/分组/加入/排序逻辑放在可计算的之前。查询中的最后两个步骤是.AsEnumerable()。选择(r=>new…
。通过ToList()
将列表具体化不需要浪费时间和内存。只需像Gabe回答的那样,使用AsEnumerable()
解析断开连接的IEnumerable
。
var users = from l in context.Logins.AsEnumerable()
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 ?? DateTime.MinValue,
l.LastActivityOn ?? DateTime.MinValue,
DateTime.MinValue,
l.LastLockedOutOn ?? DateTime.MinValue
);