C# EntitySet.Last()不是最新添加的元素?

C# EntitySet.Last()不是最新添加的元素?,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我在Linq to SQL中有一个entityset,比如说一个有多个地址的人。然后用这个代码 person.Addresses.Add(address); person.Addresses.Last(). ... // Not the one just added! Last()是某个地址,而不是最后添加的地址。使用访问上一行中添加的 person.Addresses.Where(x => x.UniqueId == address.UniqueId).Single(). ... 工

我在Linq to SQL中有一个entityset,比如说一个有多个地址的人。然后用这个代码

person.Addresses.Add(address);
person.Addresses.Last(). ... // Not the one just added!
Last()是某个地址,而不是最后添加的地址。使用访问上一行中添加的

person.Addresses.Where(x => x.UniqueId == address.UniqueId).Single(). ...
工作,但这对我来说有点奇怪


UniqueId是GUID,是地址表的主键。这就是原因吗?Last()是否返回GUID最大的地址,而不是添加的最后一个地址?

A
DbSet
不是简单的实体集合,因此这里实际上是两个数据库查询

INSERT INTO Addresses ...

SELECT ... FROM Addresses ...
两者之间没有任何联系。如果您确实想获得最近添加的项目,则应:

  • 保留刚才插入的项的主键值,并使用该值检索实体:

    person.Addresses.Add(address);
    var id = address.Id;
    //snip
    var address = person.Addresses.Single(a => a.Id == id);
    
  • 订购
    DbSet
    ,然后取最后一个:

    //Assuming the Id column is auto-incrementing
    var address = person.Addresses.OrderByDescending(a => a.Id).Take(1).Single();
    
    //Assuming you have a date added column for example:
    var address = person.Addresses.OrderByDescending(a => a.DateAdded).Take(1).Single();