我是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; }
}
答案 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()