private IQueryable<User> Fetch(
Csla.Data.ObjectContextManager<ApplicationEntities> ctx,
UserDataCriteria criteria)
{
IQueryable<User> query = ctx.ObjectContext.Users;
if (criteria.UserId != null)
{
query = query.Where(row => row.UserId == criteria.UserId);
}
if (criteria.Name != null)
{
query = query.Where(row => row.Name == criteria.Name);
}
if (criteria.Email != null)
{
query = query.Where(row => row.Email == criteria.Email);
}
if (criteria.Password != null)
{
query = query.Where(row => row.Password == criteria.Password);
}
if (criteria.Salt != null)
{
query = query.Where(row => row.Salt == criteria.Salt);
}
if (criteria.Token != null)
{
query = query.Where(row => row.Token == criteria.Token);
}
if (criteria.IsActive != null)
{
query = query.Where(row => row.IsActive == criteria.IsActive);
}
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.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.ProjectId != null)
{
query = query.Join(
ctx.ObjectContext.ProjectUserMembers.Where(pum => criteria.ProjectId.Contains(pum.ProjectId)),
u => u.UserId,
pum => pum.UserId,
(u, pum) => u).Distinct();
}
if (criteria.Text != null)
{
query = query.Where(row => row.Name.Contains(criteria.Text)
|| row.Email.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;
}