Я написал два запроса, которые выглядят так:
var loggedUser2 = ctx.Users.Where(y => y.Email == User.Identity.Name).Select(usr => new Users { UserId = usr.UserId }).AsEnumerable();
А второй запрос выглядит так:
var loggedUser = ctx.Users.FirstOrDefault(y => y.Email == User.Identity.Name);
Насколько я могу судить, второй запрос требует гораздо больше времени, чтобы извлечь одну запись из таблицы с удаленного сервера.
По первому запросу я получаю сообщение об ошибке:
The entity or complex type 'Users' cannot be constructed in a LINQ to Entities query.
когда я пытаюсь получить доступ к свойству UserId объекта «Пользователи».
Теперь у меня есть пара вопросов:
Кто-нибудь может мне помочь ? :)
@JSteward нет, это уже существующая запись из БД, если вы это имеете в виду?
Нет, я имею в виду new Users, кажется странным создавать новый класс с именем во множественном числе в select. Однако, если вы собираетесь приобрести новый User, это имело бы смысл. Так что именно типа Users?
@JSteward Users - это класс, созданный из БД ... Это в основном класс БД. Но да, хороший момент, в моем случае бесполезно использовать новый оператор в этом ... Я должен просто сделать: .select (y => y.UserId) .FirstOrDefault ()? Но будет ли это улучшением производительности по сравнению с прямым использованием: FirstOrDefault (...)?





вы можете объявить DTO или использовать анонимный тип, например:
var user = ctx.Users
.Where(u => u.Email == email)
.Select(u => new { UserId = u.UserId })
.FirstOrDefault()
Здравко, спасибо за ответ ... Насколько это будет лучше по сравнению со вторым запросом, если вообще ???
улучшение производительности - вероятно, небольшое (в данном случае). Сказав это, есть и другие вполне веские причины выбирать только то, что вы собираетесь использовать.
Ну ладно, спасибо здравко ... Какие, например, не могли бы вы назвать несколько? Я пытаюсь узнать здесь еще несколько вещей, которые я могу записать :)
@ User987 Он экономит память (вы создаете объекты меньшего размера), а также обеспечивает инкапсуляцию (получатель ваших данных не знает о данных больше, чем ему нужно). Что касается скорости, FirstOrDefault () и Where (). FirstOrDefault () работают почти одинаково.
В
Selectв вашем первом запросе: означает лиnew Usersбытьnew User?