2015-03-11 2 views
0

меня присоединиться к LINQ, как показано ниже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), 
}; 

крайне медленно, так как это занимает от 18 до 24 секунд, чтобы извлечь данные даже для 40 до 50 записей , Как я могу сделать это быстрее, так как он очень медленный. Я не уверен, что это правильный способ получить эти данные или нет. Также оценивается любая другая альтернатива этому, которая может сделать процесс намного быстрее.

+2

Если вы профилируете базу данных тем, что производит SQL? Когда вы запустите этот SQL, как выглядит план выполнения? Проблема здесь скорее связана с вашей базой данных, чем с вашим кодом. – Jamiec

+2

@Jamiec Нет, у его кода возникает проблема с выбором select statement particalarly 'Md5Decryption.Decrypt (u.FirstName)', который никогда невозможен с linq на sql, поскольку я верить. –

+1

@Jamiec Согласен, но, возможно, это связано с расшифровкой большого количества полей. –

ответ

1

Вы можете начать с перемещения всех вызовов метода Md5Decryption.Decrypt() классу UserATrailViewModel либо в конструкторе, либо в настраиваемых сеттерах. Это сделает ваш запрос более простым, так как вы действительно не хотите, чтобы база данных выполняла дешифрование.

Смежные вопросы