WHERE子句中的LINQ to SQL MAX

时间:2011-09-02 16:29:13

标签: linq entity-framework linq-to-sql linq-to-entities

我是Linq的新手,所以我遇到了困难。 我想要实现的是:

SELECT id, name, password
FROM users u
WHERE u.id = (SELECT MAX(u1.id) FROM users u1);

我的Linq是:

var dbUsers = from u in context.Users
              where u.Id == (context.Users.Max(u1 => u1.Id))
              select u;

但我总是以下列例外结束:

  

无法创建“Bla.Users”类型的常量值。只有原始   这里支持类型(例如Int32,String和Guid')   上下文。

以下是用户类:

public class Users
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
    }
}

这是我的上下文类:

 public class EFDbContext : DbContext
    {
        public DbSet<User> Users{ get; set; }
    }

4 个答案:

答案 0 :(得分:7)

您需要选择ID属性

var dbUsers = from u in context.Users
              where u.Id == (context.Users.Select(u1 => u1.Id).Max())
              select u;

答案 1 :(得分:1)

我通常以lambda格式进行LINQing ...

var dbUsers = DataContext.Users
    .Where(u => u.Id == (DataContext.Users.Max(u1 => u1.Id)))
    .Select(u => new
    {
       Id = u.Id,
       Name = u.Name,
       Password = u.Password
    });

如果你想要理解格式......

var dbUsers = from u in DataContext.Users
    where u.Id == (DataContext.Users.Max(u1 => u1.Id))
    select new 
    {
       Id = u.Id,
       Name = u.Name,
       Password = u.Password
    };

答案 2 :(得分:1)

考虑使用let声明:

var dbUsers = from u in context.Users
              let int maxId = context.Users.Max(u1 => u1.Id)
              where u.Id == maxId
              select u;

答案 3 :(得分:1)

如果这个解决了您的问题,请告诉我:

var dbUser = (from u in context.Users
              orderby u.Id descending).FirstOrDefault()