private static IQueryable<PlayedGameSearchResult> AddSearchCriteria(PlayedGameFilter playedGameFilter, IQueryable<PlayedGameSearchResult> queryable)
{
if (playedGameFilter.GamingGroupId.HasValue)
{
queryable = queryable.Where(query => query.GamingGroupId == playedGameFilter.GamingGroupId.Value);
}
if (playedGameFilter.GameDefinitionId.HasValue)
{
queryable = queryable.Where(query => query.GameDefinitionId == playedGameFilter.GameDefinitionId.Value);
}
if (!string.IsNullOrEmpty(playedGameFilter.StartDateGameLastUpdated))
{
var startDate = ParseDateTime(playedGameFilter.StartDateGameLastUpdated);
queryable = queryable.Where(query => query.DateLastUpdated >= startDate);
}
if (!string.IsNullOrEmpty(playedGameFilter.EndDateGameLastUpdated))
{
var endDate = ParseDateTime(playedGameFilter.EndDateGameLastUpdated);
endDate = endDate.Date.AddDays(1).AddMilliseconds(-1);
queryable = queryable.Where(query => query.DateLastUpdated <= endDate);
}
if (!string.IsNullOrEmpty(playedGameFilter.DatePlayedFrom))
{
var fromDate = ParseDateTime(playedGameFilter.DatePlayedFrom);
queryable = queryable.Where(query => query.DatePlayed >= fromDate);
}
if (!string.IsNullOrEmpty(playedGameFilter.DatePlayedTo))
{
var toDate = ParseDateTime(playedGameFilter.DatePlayedTo);
toDate = toDate.Date.AddDays(1).AddMilliseconds(-1);
queryable = queryable.Where(query => query.DatePlayed <= toDate);
}
if (playedGameFilter.PlayerId.HasValue)
{
queryable = queryable.Where(query => query.PlayerGameResults.Any(x => x.PlayerId == playedGameFilter.PlayerId));
}
if (playedGameFilter.MaximumNumberOfResults.HasValue)
{
queryable = queryable.Take(playedGameFilter.MaximumNumberOfResults.Value);
}
if (!string.IsNullOrEmpty(playedGameFilter.ExclusionApplicationName))
{
queryable = queryable.Where(query => query.ApplicationLinkages.All(x => x.ApplicationName != playedGameFilter.ExclusionApplicationName));
}
if (!string.IsNullOrEmpty(playedGameFilter.InclusionApplicationName))
{
queryable = queryable.Where(query => query.ApplicationLinkages.Any(x => x.ApplicationName == playedGameFilter.InclusionApplicationName));
}
return queryable;
}