public async Task <dynamic> GetCountsPerState(Guid country, string kind) { using (var session = sessionFactory()) { var staticResults = await session .Query <Documents_CountsByStaticState.Result, Documents_CountsByStaticState>() .Where(x => x.Kind == kind && x.Country == country) .ToListAsync(); var stream = session .Query <Documents_ByDynamicState.Result, Documents_ByDynamicState>() .Where(x => x.Kind == kind && x.Country == country) .As <DocumentCountProjection>(); string countryName = (await session.LoadAsync <CountryLookup>(country.ToString())).Name; var evaluator = new RealtimeStateEvaluator(); var iterator = await session.Advanced.StreamAsync(stream); while (await iterator.MoveNextAsync()) { DocumentCountProjection projection = iterator.Current.Document; var actualState = evaluator.Evaluate(new RealtimeStateEvaluationContext { StaticState = projection.State, Country = projection.Country, NextReviewAt = projection.NextReviewAt, PlannedPeriod = new ValidityPeriod(projection.StartDateTime, projection.EndDateTime), ExpirationDateTime = projection.LifetimePeriodEnd }); var result = staticResults.SingleOrDefault(r => r.State == actualState); if (result == null) { result = new Documents_CountsByStaticState.Result { Kind = kind, Country = country, CountryName = countryName, State = actualState, }; staticResults.Add(result); } result.Count++; } return(staticResults); } }
public dynamic GetCountsPerState(Guid country, string kind) { var query = from document in database.GetRepository <DocumentCountProjection>() let dynamicStates = new[] { "Active" } where document.Kind == kind && document.Country == country where !dynamicStates.Contains(document.State) group document by new { Country = document.Country, document.CountryName, document.RestrictedArea, document.Kind, document.State } into grp select new Result { Country = grp.Key.Country, CountryName = grp.Key.CountryName, AuthorizationArea = grp.Key.RestrictedArea, Kind = grp.Key.Kind, State = grp.Key.State, Count = grp.Count() }; string countryName = database .GetRepository <CountryLookup>() .Single(x => x.Id == country.ToString()).Name; List <Result> staticResults = query.ToList(); var dynamicResults = from document in database.GetRepository <DocumentCountProjection>() let dynamicStates = new[] { "Active" } where document.Kind == kind && document.Country == country where dynamicStates.Contains(document.State) select document; var evaluator = new RealtimeStateEvaluator(); foreach (var document in dynamicResults.ToArray()) { var actualState = evaluator.Evaluate(new RealtimeStateEvaluationContext { StaticState = document.State, Country = document.Country, NextReviewAt = document.NextReviewAt, PlannedPeriod = new ValidityPeriod(document.StartDateTime, document.EndDateTime), ExpirationDateTime = document.LifetimePeriodEnd }); var result = staticResults.SingleOrDefault(r => r.State == actualState); if (result == null) { result = new Result { Country = document.Country, CountryName = countryName, AuthorizationArea = document.RestrictedArea, Kind = document.Kind, State = document.State, Count = 0 }; staticResults.Add(result); } result.Count++; } return(staticResults); }
public dynamic GetCountsPerState(Guid country, string kind) { using (var session = sessionFactory()) { string countryName = session.Query <CountryLookup>().Single(c => c.Id == country.ToString()).Name; var staticResults = from document in session.Query <DocumentCountProjection>() let dynamicStates = new[] { "Active" } where !dynamicStates.Contains(document.State) && !document.Corrupt where document.Kind == kind && document.Country == country group document by new { document.Country, AreaRestrictions = document.RestrictedArea, document.Kind, document.State } into grp select new Result { Kind = grp.Key.Kind, Country = grp.Key.Country, CountryName = countryName, AreaRestrictions = grp.Key.AreaRestrictions, State = grp.Key.State, Count = grp.Count() }; var evaluator = new RealtimeStateEvaluator(); var dynamicResults = from document in session.Query <DocumentCountProjection>() let dynamicStates = new[] { "Active" } where document.Kind == kind && document.Country == country where !dynamicStates.Contains(document.State) && !document.Corrupt select document; var results = new List <Result>(staticResults); foreach (var projection in dynamicResults.ToArray()) { var actualState = evaluator.Evaluate(new RealtimeStateEvaluationContext { StaticState = projection.State, Country = projection.Country, NextReviewAt = projection.NextReviewAt, PlannedPeriod = new ValidityPeriod(projection.StartDateTime, projection.EndDateTime), ExpirationDateTime = projection.LifetimePeriodEnd }); var result = staticResults.SingleOrDefault(r => r.State == actualState); if (result == null) { result = new Result { Kind = kind, Country = country, CountryName = countryName, AreaRestrictions = projection.RestrictedArea, State = actualState, Count = 1 }; results.Add(result); } result.Count++; } return(results); } }