using System.Linq; using Microsoft.EntityFrameworkCore; using LCU.Library.Internal.DispatcherModels.Entities; namespace LCU.Api.Internal.DispatcherLib.Extensions.Queryables; public static class IncludeAllQueryable { /// /// Since this runs as Split Query, the OrderyByDescending only works during the querying but not in our result set. /// OrderbyDescending on WorkItemExecutions will have to be done prior to use if need be. /// /// /// /// public static IQueryable IncludeAll(this IQueryable queryable, int numberOfWorkItemExecutions, int numberOfExecutionMessages) { return queryable.Include(job => job.WorkItems) .ThenInclude(wi => wi.WorkItemExecutions .OrderByDescending(workItemExecution => workItemExecution.StartedTimestamp) .Take(numberOfWorkItemExecutions)) .ThenInclude(workItemExecution => workItemExecution.ExecutionMessages .OrderByDescending(executionMessage => executionMessage.MessageDate) .Take(numberOfExecutionMessages)) .Include(job => job.JobErrorRecipients) .Include(jobTag => jobTag.JobTags) .ThenInclude(jobTag => jobTag.Tag) .AsSplitQuery(); } public static IQueryable IncludeErrorRecipients(this IQueryable queryable) { return queryable.Include(job => job.JobErrorRecipients); } public static IQueryable IncludeAll(this IQueryable queryable) { return queryable.Include(workItem => workItem.WorkItemExecutions); } public static IQueryable IncludeAll(this IQueryable queryable, int numberOfWorkItemExecutions, int numberOfExecutionMessages) { return queryable.Include(wi => wi.WorkItemExecutions .OrderByDescending(workItemExecution => workItemExecution.StartedTimestamp) .Take(numberOfWorkItemExecutions)) .ThenInclude(workItemExecution => workItemExecution.ExecutionMessages .OrderByDescending(executionMessage => executionMessage.MessageDate) .Take(numberOfExecutionMessages)); } public static IQueryable IncludeAll(this IQueryable queryable) { return queryable.Include(jobTag => jobTag.Tag); } public static IQueryable IncludeAll(this IQueryable queryable) { return queryable.Include(workItemExecution => workItemExecution.ExecutionMessages); } public static IQueryable IncludeAll(this IQueryable queryable) { return queryable.Include(cleanUpJobSetting => cleanUpJobSetting.CleanUpJobTags) .ThenInclude(cleanUpJobTag => cleanUpJobTag.Tag); } public static IQueryable IncludeAll(this IQueryable queryable) { return queryable.Include(cleanUpJobTag => cleanUpJobTag.Tag); } }