Подбайте про продуктивність:
Я відчував це принаймні з EF Core різні відповіді, що даються тут, можуть призвести до різної продуктивності. Мені відомо, що ОП запитала про Linq у SQL, але мені здається, що такі ж питання виникають і з EF Core.
У конкретному випадку, з яким мені довелося впоратися, пропозиція (синтаксично приємнішого) Марка Гравелла призвела до того, що ліві з’єднання всередині хреста застосовуються - аналогічно тому, що описав Майк У, - що призвело до того, що орієнтовні витрати на цей конкретний запит були дві разів вищий у порівнянні з запитом без перехресного з'єднання . Час виконання сервера відрізнявся в 3 рази . [1]
Рішення Marc Gravell призвело до запиту без перехресних з'єднань.
Контекст: По суті, мені потрібно було виконати два лівих з'єднання на двох таблицях, кожна з яких знову вимагала приєднання до іншої таблиці. Крім того, там мені довелося вказати інші умови, де в таблицях, на яких мені потрібно було застосувати ліве з'єднання. Крім того, у мене було два внутрішніх приєднання на головному столі.
Орієнтовні витрати оператора:
- з хрестом застосовувати: 0,2534
- без хреста застосовувати: 0,0991.
Часи виконання сервера в мс (запити виконуються 10 разів; вимірюються за допомогою значення SET STATISTICS TIME ON):
- з хрестом застосувати: 5, 6, 6, 6, 6, 6, 6, 6, 6, 6
- без хреста застосовувати: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
(Перший запуск був повільнішим для обох запитів; здається, що щось є кешованим.)
Розміри столу:
- основна таблиця: 87 рядків,
- перша таблиця для з’єднання зліва: 179 рядків;
- друга таблиця для з’єднання зліва: 7 рядків.
Версія EF Core: 2.2.1.
Версія SQL Server: MS SQL Server 2017 - 14 ... (для Windows 10).
Усі відповідні таблиці мали індекси лише на первинних ключах.
Мій висновок: завжди рекомендується дивитися на створений SQL, оскільки він дійсно може відрізнятися.
[1] Цікаво, що при встановленні "Статистика клієнтів" в MS SQL Server Management Studio увімкнено, я міг бачити протилежну тенденцію; а саме, що останній запуск розчину без перехресного нанесення зайняв більше 1 с. Я гадаю, що тут щось не так - можливо, з моїм налаштуванням.