通过 where 和 select LINQ 语句从 table 中仅获取一列
Fetching only one column from a table via where and select LINQ statement
我写了两个查询,如下所示:
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);
据我所知,第二个查询从远程服务器的 table 中提取单条记录需要花费更多时间。
第一个查询出现错误:
The entity or complex type 'Users' cannot be constructed in a LINQ to Entities query.
当我尝试访问 "Users" 对象的 属性 UserId 时。
现在我有几个问题:
- 为什么会出现此错误以及如何实际访问 IEnumerable 集合的 属性?我知道我可以使用 .ToList() 实现查询,然后在 [0].UserId 访问它,但我认为这不是正确的方法吗?
- 从 table(在我的例子中是 UserId)中为单个记录 select 单个列的最有效方法是什么?该查询看起来如何(除了使用存储过程)。
有人可以帮助我吗? :)
你可以声明一个 DTO 或者你可以像这样使用一个匿名类型:
var user = ctx.Users
.Where(u => u.Email == email)
.Select(u => new { UserId = u.UserId })
.FirstOrDefault()
我写了两个查询,如下所示:
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);
据我所知,第二个查询从远程服务器的 table 中提取单条记录需要花费更多时间。
第一个查询出现错误:
The entity or complex type 'Users' cannot be constructed in a LINQ to Entities query.
当我尝试访问 "Users" 对象的 属性 UserId 时。
现在我有几个问题:
- 为什么会出现此错误以及如何实际访问 IEnumerable 集合的 属性?我知道我可以使用 .ToList() 实现查询,然后在 [0].UserId 访问它,但我认为这不是正确的方法吗?
- 从 table(在我的例子中是 UserId)中为单个记录 select 单个列的最有效方法是什么?该查询看起来如何(除了使用存储过程)。
有人可以帮助我吗? :)
你可以声明一个 DTO 或者你可以像这样使用一个匿名类型:
var user = ctx.Users
.Where(u => u.Email == email)
.Select(u => new { UserId = u.UserId })
.FirstOrDefault()