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);
}
}