Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WHERE子句中的LINQ到SQL MAX_Linq_Entity Framework_Linq To Sql_Linq To Entities - Fatal编程技术网

WHERE子句中的LINQ到SQL MAX

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))

我是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、字符串和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)中,但我不明白为什么。