2013-09-24 3 views
2

У меня есть функция, чтобы извлечь деталь пользователякак этот запрос linq выполнить

Я закрепил несколько полей. Я хочу знать, как LINQ выполнит фактический SQL запрос

public User GetUserByEmail(string email) 
{ 
     return _db.Users.Where(x => x.LastName.Decrypt() == "Patel").ToList(); 
} 

x.LastName.Decrypt() он будет извлечь все записи из SQL и выполнение расшифровки по каждому полю в стороне коды?

Что делать, если я использую

public User GetUserByEmail(string email) 
{ 
     return _db.Users.Where(x => x.LastName == "Patel".Encrypt()).ToList(); 
} 

который один лучше

+0

Просьба указать определение «Расшифровать». – Andrey

ответ

1

Хороших шансов, что ваш первый запрос не будет работать вообще, если вы не заставляете приведение данных в память, вызвав AsEnumerable(), ToList или ToArray, потому что провайдер EF не знает, как перевести Encrypt функции к SQL.

Второй запрос, с другой стороны, должен работать нормально, потому что это сравнение строк с строкой.

Кроме того, второй способ запроса позволяет реализовать потенциально более безопасную схему, когда «шифрование» строки не может быть отменено с помощью Decrypt, например. когда вы храните дайджест сообщений.

+0

вы правы @dasblinkenlight, первый запрос приведет к ошибке выполнения – Patel

0

.Decrypt() Вызов в функции Where будет расшифровывать LastName на каждом & каждой строке. Вам будет лучше с помощью метода .Encrypt(), который вы выведете, который однажды вызовет «Шифровать» и сравните каждое LastName с зашифрованной строкой для «Pate1».

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