LINQ查询中的where子句是否按任何默认顺序排序

S52*_*S52 4 c# linq

public IQueryable<CarVersion> GetCar(int carIdToSearch)
{
    return _Dbcontext.CarVersion.Include("CarFactory").
            .Where(x => x.carId== carIdToSearch);
}
Run Code Online (Sandbox Code Playgroud)

我有CarVersion表,其中有两列version和carId。版本列是主键。单个carId可以有多个版本。CarFactory表具有来自carVersion表的外键版本。因此,我试图理解,当我执行上述查询时,它将始终为我提供按升序排列的结果。还是基于主键?还是可以保证?我查看了MS文档,但没有说明订购信息。

Tim*_*ter 5

您将获得的结果取决于LINQ提供程序。如果是Linq-To-Objects,则顺序是稳定的(请参阅下文)。这意味着它将与源序列中的相同。如果它是数据库驱动的LINQ提供程序,则Linq-To-Entities该命令不是预先确定的。

您需要ORDER BY在sql中确保一定顺序。因此,您需要OrderBy在LINQ中使用:

return _Dbcontext.CarVersion.Include("CarFactory").
    .Where(x => x.carId== carIdToSearch)
    .OrderBy(x => x.Version);
Run Code Online (Sandbox Code Playgroud)
  • 但是,即使在Linq-To-Objects中,也不能保证顺序始终相同。它还取决于序列的类型。基于集合的集合(例如Dictionary或)HashSet也不保证其顺序与您在此处此处阅读的顺序相同。