Одна из более медленных частей запросов к базе данных - это передача выбранных вами данных из СУБД в локальный процесс.Следовательно, разумно ограничить количество передаваемых данных.
Очевидно, что ваш FieldSetGroup
имеет ноль или более FieldSets
.Каждый FieldSet
принадлежит ровно одному FieldsetGroup
.Это идентифицируется внешним ключом FieldSetGroupId
.Значение этого поля равно Id
из FieldSetGroup
.
Так что, если у вас есть FieldSetGroup
с Id = 10, а у этого FieldSetGroup
есть 1000 FieldSets
, то каждый FieldSet
будет иметь значение внешнего ключа FieldSetGroupId
, равное 10. Нет необходимости передавать это значение 1000 раз.
Совет: чтобы ограничить объем передаваемых данных, избегайте передачи большего количества данных, чем необходимо, используйтеSelect
вместо Include
и выберите только те данные, которые вы действительно планируете использовать.Используйте Include
, если вы планируете обновить извлеченные данные.
Если вы используете Select
, вы можете заказать все, что захотите:
var result = dbContext.FieldsetGroup
.Where((fieldSetGroup => fieldSetGroup.FieldsetGroupId == fieldSetGroupId)
.Select(fieldSetGroup => new
{
... // select the fieldSetGroup properties you plan to use
FieldSets = fieldSetGroup.FieldSets
.OrderBy(fieldSet => fieldSet.Order)
.Select(fieldSet => new
{
... // only select the fieldSet properties you plan to use
FieldSetFields = fieldSet.FieldSetFields
.OrderBy(fieldSetField => fieldSetField.Order)
.Select(fieldSetField => new
{
...
})
.ToList(),
})
.ToList(),
})
.ToList(),
})
.FirstOrDefault();