private IQueryable<Sprint> Fetch(
Csla.Data.ObjectContextManager<ApplicationEntities> ctx,
SprintDataCriteria criteria)
{
IQueryable<Sprint> query = ctx.ObjectContext.Sprints
.Include("Project")
.Include("CreatedByUser")
.Include("ModifiedByUser");
if (criteria.SprintId != null)
{
query = query.Where(row => row.SprintId == criteria.SprintId);
}
if (criteria.CompletedDate != null
&& criteria.CompletedDate.DateFrom.Date != DateTime.MinValue.Date)
{
query = query.Where(row => row.CompletedDate >= criteria.CompletedDate.DateFrom);
}
if (criteria.CompletedDate != null
&& (criteria.CompletedDate.DateTo.Date != DateTime.MaxValue.Date))
{
query = query.Where(row => row.CompletedDate <= criteria.CompletedDate.DateTo);
}
if (criteria.IsActive != null)
{
query = query.Where(row => row.IsActive == criteria.IsActive);
}
if (criteria.IsArchived != null)
{
query = query.Where(row => row.IsArchived == criteria.IsArchived);
}
if (criteria.IsCompleted != null)
{
query = query.Where(row => row.IsCompleted == criteria.IsCompleted);
}
if (criteria.Duration != null)
{
query = query.Where(row => row.Duration == criteria.Duration);
}
if (criteria.EstimatedCompletedDate != null
&& criteria.EstimatedCompletedDate.DateFrom.Date != DateTime.MinValue.Date)
{
query = query.Where(row => row.EstimatedCompletedDate >= criteria.EstimatedCompletedDate.DateFrom);
}
if (criteria.EstimatedCompletedDate != null
&& (criteria.EstimatedCompletedDate.DateTo.Date != DateTime.MaxValue.Date))
{
query = query.Where(row => row.EstimatedCompletedDate <= criteria.EstimatedCompletedDate.DateTo);
}
if (criteria.EstimatedDuration != null)
{
query = query.Where(row => row.EstimatedDuration == criteria.EstimatedDuration);
}
if (criteria.Name != null)
{
query = query.Where(row => row.Name == criteria.Name);
}
if (criteria.ProjectId != null)
{
query = query.Where(row => criteria.ProjectId.Contains(row.ProjectId));
}
if (criteria.CreatedBy != null)
{
query = query.Where(row => row.CreatedBy == criteria.CreatedBy);
}
if (criteria.CreatedDate != null
&& criteria.CreatedDate.DateFrom.Date != DateTime.MinValue.Date)
{
query = query.Where(row => row.CreatedDate >= criteria.CreatedDate.DateFrom);
}
if (criteria.CreatedDate != null
&& (criteria.CreatedDate.DateTo.Date != DateTime.MaxValue.Date))
{
query = query.Where(row => row.CreatedDate <= criteria.CreatedDate.DateTo);
}
if (criteria.ModifiedBy != null)
{
query = query.Where(row => row.ModifiedBy == criteria.ModifiedBy);
}
if (criteria.ModifiedDate != null
&& criteria.ModifiedDate.DateFrom.Date != DateTime.MinValue.Date)
{
query = query.Where(row => row.ModifiedDate >= criteria.ModifiedDate.DateFrom);
}
if (criteria.ModifiedDate != null
&& (criteria.ModifiedDate.DateTo.Date != DateTime.MaxValue.Date))
{
query = query.Where(row => row.ModifiedDate <= criteria.ModifiedDate.DateTo);
}
if (criteria.Text != null)
{
query = query.Where(row => row.Name.Contains(criteria.Text));
}
if (criteria.SortBy != null)
{
query = query.OrderBy(string.Format(
"{0} {1}",
criteria.SortBy,
criteria.SortOrder == ListSortDirection.Ascending ? "ASC" : "DESC"));
}
if (criteria.SkipRecords != null)
{
query = query.Skip(criteria.SkipRecords.Value);
}
if (criteria.MaximumRecords != null)
{
query = query.Take(criteria.MaximumRecords.Value);
}
return query;
}