【发布时间】:2015-03-11 09:43:15
【问题描述】:
我已经加入 linq 如下
IEnumerable < UserATrailViewModel > v1 = from u in useratrailbusiness.GetAllUsers().AsQueryable()
join u1 in userPackageAtrailBusiness.GetAllUsers().AsQueryable()
on u.Uid equals u1.Uid into t1
from subpet in t1.DefaultIfEmpty()
orderby u.CreatedDate descending
select new UserATrailViewModel {
UserATID = u.UserATID,
Uid = u.Uid,
RoleId = u.RoleId,
FirstName = Md5Decryption.Decrypt(u.FirstName),
LastName = Md5Decryption.Decrypt(u.LastName),
Email = u.Email,
UserName = u.UserName,
CreatedDate = u.CreatedDate,
IsActive = u.IsActive,
CreatedBy = u.CreatedBy,
ModifiedDate = u.ModifiedDate,
ModifiedBy = u.ModifiedBy,
//UniqueGuid = u.UniqueGuid,
CompanyName = Md5Decryption.Decrypt(u.CompanyName),
Country = Md5Decryption.Decrypt(u.Country),
State = Md5Decryption.Decrypt(u.State),
City = Md5Decryption.Decrypt(u.City),
Address1 = Md5Decryption.Decrypt(u.Address1),
Address2 = Md5Decryption.Decrypt(u.Address2),
PhoneNo = Md5Decryption.Decrypt(u.PhoneNo),
MobileNo = Md5Decryption.Decrypt(u.MobileNo),
SrvDTStamp = u.SrvDTStamp,
ClientCountry = u.ClientCountry,
App_User = u.App_User,
Audit_Action = u.Audit_Action,
FullName = Md5Decryption.Decrypt(u.FirstName) + " " + Md5Decryption.Decrypt(u.LastName),
ContactNo = Md5Decryption.Decrypt(u.PhoneNo) + " , " + Md5Decryption.Decrypt(u.MobileNo),
PackageName = (subpet == null ? String.Empty : subpet.PackageName),
};
它非常慢,因为即使是 40 到 50 条记录也需要 18 到 24 秒才能获取数据。我怎样才能让它更快,因为它非常慢。我不确定获取这些数据是否是正确的方法。所以任何其他替代方法也很受欢迎,它可以使过程更快。
【问题讨论】:
-
如果您对数据库进行概要分析,正在生成什么 SQL?当您运行该 SQL 时,执行计划是什么样的?这里的问题更有可能与您的数据库有关,而不是与您的代码有关
-
@Jamiec 不,他的代码在查看 select 语句时遇到问题,尤其是
Md5Decryption.Decrypt(u.FirstName),我相信这是 linq to sql 永远不可能实现的。 -
@Jamiec 同意,但可能也与解密很多字段有关
-
哇,我什至没有注意到! Md5 解密。我知道它的哈希值很弱,但这似乎……有点……疯了。
-
useratrailbusiness.GetAllUsers().AsQueryable() 获取内存中的所有表。您不是在 linq to entity 范式中,而是在 linq to object 中。尝试重写 linq to entity 的查询并对查询结果进行处理(如解密)。
标签: c# performance linq entity-framework linq-to-sql