LINQ查询中的where子句是否有任何默认顺序筛选序列

时间:2016-09-22 14:54:23

标签: c# linq

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

我有CarVersion表,其中有两列版本和carId 。版本列是主键。单个carId可以有多个版本。 CarFactory表具有来自carVersion表的外键版本。所以我试图理解,当我执行上面的查询时,它总是会给我按升序排序的结果。或者它将基于主键?还是可以保证?我查看了MS文档,但没有说明订购。

1 个答案:

答案 0 :(得分:4)

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

您需要在SQL中使用ORDER BY来确保某个订单。所以你需要LINQ中的OrderBy

return _Dbcontext.CarVersion.Include("CarFactory").
    .Where(x => x.carId== carIdToSearch)
    .OrderBy(x => x.Version);
  • 但是,即使在Linq-To-Objects中,也不能保证订单总是一样的。它还取决于序列的类型。像DictionaryHashSet这样的基于集合的集合也不保证订单与您可以阅读herehere保持一致。