WHERE子句中的LINQ到SQL MAX
我是Linq的新手,所以正如预期的那样,我遇到了困难。 我试图实现的是:WHERE子句中的LINQ到SQL MAX,linq,entity-framework,linq-to-sql,linq-to-entities,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 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、字符串和Guid')
上下文
以下是users类:
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; }
}
公共类EFDbContext:DbContext
{
公共数据库集用户{get;set;}
}
您需要选择ID
属性
var dbUsers = from u in context.Users
where u.Id == (context.Users.Select(u1 => u1.Id).Max())
select u;
我通常用lambda格式来做我的临清
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
};
如果你想要理解格式
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
};
考虑使用
let
语句:
var dbUsers = from u in context.Users
let int maxId = context.Users.Max(u1 => u1.Id)
where u.Id == maxId
select u;
请让我知道这是否解决了您的问题:
var dbUser = (from u in context.Users
orderby u.Id descending).FirstOrDefault()
可以使用lambda表达式:
var dbUser = context.Users.First(u => u.Id== (context.Users.Select(u2
=> u2.Id).Max()));
或:
谢谢你的回复,但我得到了同样的例外。同样的问题。我忘了提到我正在使用MySQL作为数据源。如果我将最大聚合移到查询之外,事情会起作用:int id=context.Users.Max(u1=>u1.id),然后var dbUsers=from u in context.Users,其中u.id==id选择u;不幸的是,同样的错误。这个问题存在于这个子查询context.Users.Max(u1=>u1.Id)中,但我不明白为什么。