Вы можете извлечь все общее IQueryable<T>
для разделения свойства / метода. Поскольку запросы LINQ не выполняются до перечисления (так называемое отложенное выполнение), его можно использовать в качестве базы для составления других запросов, например
private IQueryable<Tract> Query() => context.Tracts
//.Include(p => p.ContractType)
//.Include(p => p.ContractSubType)
.Select(p => new Tract
{
Id = p.Id,
Acreage = p.Acreage,
Administrative = p.Administrative,
ContractType = new ContractType
{
Id = p.ContractType.Id,
ContractTypeName = p.ContractType.ContractTypeName
},
ContractSubType = new ContractSubType
{
Id = p.ContractSubType.Id,
ContractSubTypeName = p.ContractSubType.ContractSubTypeName
}
});
(Include
s являются избыточными (игнорируются) для проекции ( Select
) запросов)
, затем
public async Task<IEnumerable<Tract>> GetAllAsync() =>
await Query().OrderByDescending(p => p.Id).ToListAsync();
и
public async Task<Tract> GetByIdAsync(long id) =>
await Query().FirstOrDefaultAsync(p => p.Id == id);