public IQueryable<CarVersion> GetCar(int carIdToSearch)
{
return _Dbcontext.CarVersion.Include("CarFactory").
.Where(x => x.carId== carIdToSearch);
}
я маю CarVersion
таблиця, яка має два стовпці версія та carId. Стовпець версії - це первинний ключ. Може бути декілька версій для одного carId. CarFactory
таблиця має версію зовнішнього ключа від carVersionтаблиця. Отже, я намагаюся зрозуміти, коли я виконую вищезазначений запит, він завжди дасть мені результати, які впорядковані за зростанням. Або він буде заснований на первинному ключі? Або це може бути гарантовано? Я подивився документацію MS, але це не так сказати що-небудь про замовлення.
Відповіді:
4 для відповіді № 1Результат, який ви отримаєте, залежить від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);
- Однак навіть у Linq-To-Objects не гарантується, що порядок завжди буде однаковим. Це також залежить від типу послідовності. Встановити колекції на основі типу
Dictionary
абоHashSet
також не гарантуйте, що замовлення залишатиметься таким же, як ви можете прочитати тут і тут.