通过 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 时。

现在我有几个问题:

  1. 为什么会出现此错误以及如何实际访问 IEnumerable 集合的 属性?我知道我可以使用 .ToList() 实现查询,然后在 [0].UserId 访问它,但我认为这不是正确的方法吗?
  2. 从 table(在我的例子中是 UserId)中为单个记录 select 单个列的最有效方法是什么?该查询看起来如何(除了使用存储过程)。

有人可以帮助我吗? :)

你可以声明一个 DTO 或者你可以像这样使用一个匿名类型:

var user = ctx.Users
   .Where(u => u.Email == email)
   .Select(u => new { UserId = u.UserId })
   .FirstOrDefault()