C# Guid:如何通过LINQ向实体获取最新插入的记录?

C# Guid:如何通过LINQ向实体获取最新插入的记录?,c#,linq,entity-framework-6,guid,C#,Linq,Entity Framework 6,Guid,我正在使用以下代码获取最新插入的记录: public Request GetLastRequest() { return _request.Find(_request.Max(p => p.Id)); } 如您所见,Id是Guid的类型: public class Request { public Request() { Id = Guid.NewGuid(); } [DatabaseGene

我正在使用以下代码获取最新插入的记录:

public Request GetLastRequest()
{
    return _request.Find(_request.Max(p => p.Id));
}
如您所见,
Id
Guid
的类型:

public class Request
{
        public Request()
        {
            Id = Guid.NewGuid();
        }
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }

}
运行代码后,出现以下错误:

An exception of type 'System.NotSupportedException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

PS:如果我将
int
用于
Id

则上述代码可以工作,这与
int
一起工作,因为实体框架可以将
Max()
-linq方法转换为适当的sql函数。但是对于
Guid
它失败,因为它们不受支持

看一下这个(向下滚动到MAX(表达式)):

一种集合(T),其中T是以下类型之一:Byte、Int16、Int32、Int64、Byte、Single、Double、Decimal、DateTime、DateTimeOffset、Time、String、Binary


您需要给记录加上时间戳或在记录上加一个自动递增的int-GUID是随机生成的,因此它们在插入后实际上不会表示“max”GUID


如果您的主要目的是在插入记录后获取该记录,则可以在应用程序层中生成GUID并将其插入数据库,这样您就可以返回刚才插入的GUID,以便在数据库中查询您的信息。

在哪一点出现错误?@Rahul Inside
GetLastRequest()
方法。ReturnGuid只意味着是唯一的,不意味着要订购。您不能在SQL Server中对Guid执行Max,因此EF不支持它。与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。顺便说一句,这是“提前感谢”,不是“提前感谢”“。这解释了OP的代码不起作用的原因,但并没有真正回答如果使用GUID如何获取最新记录的问题。当然,但我认为OP没有意识到这一点,因为他没有要求解决方案,只是想知道错误。我知道你从哪里来,但标题是字面上的“如何通过Linq向实体获取最新插入的记录?”。我只是认为,如果您包含用于插入最后一条记录的代码,您的答案会更好。