【发布时间】:2010-04-14 14:58:34
【问题描述】:
我正在使用具有 50000 条记录的 ASPNET 成员资格,并且我们有另一个名为“scm_Users”的表,其中包含确切数量的记录,它们没有通过任何键链接。我有一个简单的 SQL:
select * from dbo.aspnet_Users a, dbo.scm_Users b
where a.UserName = b.UserName
我可以在不到 1 秒的时间内获得 50000 条记录。
在 LINQ 中,(使用实体框架)当我尝试做同样的事情时:
IEnumerable<MembershipUser> allMembershipUsers = Membership.GetAllUsers().Cast<MembershipUser>();
ObjectQuery<User> users = this.DataContext.UserSet;
var result = (from a in allMembershipUsers
from b in users
where a.UserName == b.UserName
select new
{
.....
}).AsEnumerable();
当我将结果绑定到 Grid 时,50000 条记录超时。当我调试它并将鼠标悬停在“结果视图”上时,它也超时了。当然,如果我使用 Membership.FindUsersByName() 并限制记录的数量,它将返回结果。
而且,如果我将 50000 条记录直接绑定到 Grid 而不查询 Membership,Grid 也可以工作。
var result = (from b in users
select b).AsEnumerable();
我做错了什么?
注意
【问题讨论】:
-
您不需要
.AsEnumerable()或 cast 调用。
标签: sql linq entity-framework asp.net-membership linq-to-entities