LINQ查询中的where子句是否有默认的顺序来过滤序列?

本文关键字:顺序 过滤 默认 查询 where 子句 是否 LINQ | 更新日期: 2023-09-27 18:08:31

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

我有CarVersion表,它有两列版本和id 。版本列是主键。单个卡可以有多个版本。CarFactory表有carVersion表的外键版本。所以我试图理解,当我执行上面的查询时,它总是会给我按升序排序的结果。还是基于主键?还是可以保证?我看了微软的文档,但是它没有说任何关于排序的事情。

LINQ查询中的where子句是否有默认的顺序来过滤序列?

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

在sql中需要一个ORDER BY来保证一定的顺序。所以你需要一个OrderBy在LINQ:

return _Dbcontext.CarVersion.Include("CarFactory").
    .Where(x => x.carId== carIdToSearch)
    .OrderBy(x => x.Version);
    然而,即使在链接到对象中,也不能保证顺序总是相同的。这也取决于序列的类型。像DictionaryHashSet这样的基于集合的集合也不能保证顺序保持不变,你可以在这里和这里阅读。