/ / Чи існує порядок за замовчуванням, в якому речення в запиті LINQ фільтрує послідовність - c #, linq

Чи є який-небудь порядок за замовчуванням, де в пункті LINQ запит фільтрує послідовність - c #, linq

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 також не гарантуйте, що замовлення залишатиметься таким же, як ви можете прочитати тут і тут.