未提供 OrderBy 或 OrderByDescending 时的 Linq FirstOrDefault 排序?

Linq FirstOrDefault ordering when OrderBy or OrderByDescending are not supplied?

如果我们有一个基本结构为

的EF实体
public class Entity
{
   public int Id {get; set;}
   public string name {get; set;}
   public DateTime lastUpdated {get; set;}
}

以及包含 4 个实体的集合:

entities = new List<Entity>{
   new { Id = 0, Name = "Thing One", LastUpdated = new DateTime(2020, 10, 1, 0, 0, 0,)},
   new { Id = 1, Name = "Thing One", LastUpdated = new DateTime(2020, 10, 4, 0, 0, 0,)},
   new { Id = 2, Name = "Thing One", LastUpdated = new DateTime(2020, 10, 3, 0, 0, 0,)},
   new { Id = 3, Name = "Thing One", LastUpdated = new DateTime(2020, 10, 2, 0, 0, 0,)}
};

如果我们使用 Linq 以 select 名称 属性 的 FirstOrDefault

   var selectedEntity = entities.FirstOrDefault(e => e.Name == "Thing One");

这是要做什么 return?

这导致我正在审查的一段代码出现问题;这将通过仅允许唯一实体并使用 SingleOrDefault 来修复,但我很好奇 FirstOrDefault 在没有 OrderBy 时默认情况下会变成 return条款。

返回符合该条件的第一个条目,如果有多个条目匹配结果为unpredictable/undefined。如果您想确保特定项目,您需要应用 OrderBy:

var selectedEntity = entities
   .Where(e => e.Name == "Thing One")
   .OrderByDescending(e => e.LastUpdated)
   .FirstOrDefault();

数据库返回的内容取决于供应商。这个相关的问题可能会有所帮助:When no 'Order by' is specified, what order does a query choose for your record set?