public IEnumerable <ValidationResult> Validate(ValidationContext validationContext) { if (ProjectExemptReportingYearUpdates != null && ProjectExemptReportingYearUpdates.Any(x => x.IsExempt) && string.IsNullOrWhiteSpace(Explanation)) { yield return(new SitkaValidationResult <PerformanceMeasuresViewModel, string>( FirmaValidationMessages.ExplanationNecessaryForProjectExemptYears, x => x.Explanation)); } }
public IEnumerable <ValidationResult> Validate(ValidationContext validationContext) { if (ProjectExemptReportingYearUpdates != null && ProjectExemptReportingYearUpdates.Any(x => x.IsExempt) && string.IsNullOrWhiteSpace(Explanation)) { yield return(new SitkaValidationResult <ReportedPerformanceMeasuresViewModel, string>( FirmaValidationMessages.ExplanationNecessaryForProjectExemptYears, x => x.Explanation)); } if (!string.IsNullOrWhiteSpace(Explanation) && Explanation.Length > ProjectUpdateBatch.FieldLengths.PerformanceMeasureActualYearsExemptionExplanation) { yield return(new SitkaValidationResult <ReportedPerformanceMeasuresViewModel, string>( FirmaValidationMessages.ExplanationForProjectExemptYearsExceedsMax(ProjectUpdateBatch.FieldLengths.PerformanceMeasureActualYearsExemptionExplanation), x => x.Explanation)); } }
/// <summary> /// Dependent type names of this entity /// </summary> public void DeleteChildren(DatabaseEntities dbContext) { foreach (var x in PerformanceMeasureActualUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in PerformanceMeasureExpectedUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectAttachmentUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectClassificationUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectContactUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectCustomAttributeUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectExemptReportingYearUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectExternalLinkUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectFundingSourceExpenditureUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectGeospatialAreaTypeNoteUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectGeospatialAreaUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectImageUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectLocationStagingUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectLocationUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectNoFundingSourceIdentifiedUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectNoteUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectOrganizationUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectRelevantCostTypeUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectUpdateHistories.ToList()) { x.DeleteFull(dbContext); } foreach (var x in TechnicalAssistanceRequestUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectFundingSourceBudgetUpdates.ToList()) { x.DeleteFull(dbContext); } }
/// <summary> /// Active Dependent type names of this object /// </summary> public List <string> DependentObjectNames() { var dependentObjects = new List <string>(); if (PerformanceMeasureActualUpdates.Any()) { dependentObjects.Add(typeof(PerformanceMeasureActualUpdate).Name); } if (PerformanceMeasureExpectedUpdates.Any()) { dependentObjects.Add(typeof(PerformanceMeasureExpectedUpdate).Name); } if (ProjectAttachmentUpdates.Any()) { dependentObjects.Add(typeof(ProjectAttachmentUpdate).Name); } if (ProjectClassificationUpdates.Any()) { dependentObjects.Add(typeof(ProjectClassificationUpdate).Name); } if (ProjectContactUpdates.Any()) { dependentObjects.Add(typeof(ProjectContactUpdate).Name); } if (ProjectCustomAttributeUpdates.Any()) { dependentObjects.Add(typeof(ProjectCustomAttributeUpdate).Name); } if (ProjectExemptReportingYearUpdates.Any()) { dependentObjects.Add(typeof(ProjectExemptReportingYearUpdate).Name); } if (ProjectExternalLinkUpdates.Any()) { dependentObjects.Add(typeof(ProjectExternalLinkUpdate).Name); } if (ProjectFundingSourceExpenditureUpdates.Any()) { dependentObjects.Add(typeof(ProjectFundingSourceExpenditureUpdate).Name); } if (ProjectGeospatialAreaTypeNoteUpdates.Any()) { dependentObjects.Add(typeof(ProjectGeospatialAreaTypeNoteUpdate).Name); } if (ProjectGeospatialAreaUpdates.Any()) { dependentObjects.Add(typeof(ProjectGeospatialAreaUpdate).Name); } if (ProjectImageUpdates.Any()) { dependentObjects.Add(typeof(ProjectImageUpdate).Name); } if (ProjectLocationStagingUpdates.Any()) { dependentObjects.Add(typeof(ProjectLocationStagingUpdate).Name); } if (ProjectLocationUpdates.Any()) { dependentObjects.Add(typeof(ProjectLocationUpdate).Name); } if (ProjectNoFundingSourceIdentifiedUpdates.Any()) { dependentObjects.Add(typeof(ProjectNoFundingSourceIdentifiedUpdate).Name); } if (ProjectNoteUpdates.Any()) { dependentObjects.Add(typeof(ProjectNoteUpdate).Name); } if (ProjectOrganizationUpdates.Any()) { dependentObjects.Add(typeof(ProjectOrganizationUpdate).Name); } if (ProjectRelevantCostTypeUpdates.Any()) { dependentObjects.Add(typeof(ProjectRelevantCostTypeUpdate).Name); } if ((ProjectUpdate != null)) { dependentObjects.Add(typeof(ProjectUpdate).Name); } if (ProjectUpdateHistories.Any()) { dependentObjects.Add(typeof(ProjectUpdateHistory).Name); } if (TechnicalAssistanceRequestUpdates.Any()) { dependentObjects.Add(typeof(TechnicalAssistanceRequestUpdate).Name); } if (ProjectFundingSourceBudgetUpdates.Any()) { dependentObjects.Add(typeof(ProjectFundingSourceBudgetUpdate).Name); } return(dependentObjects.Distinct().ToList()); }
/// <summary> /// Does this object have any dependent objects? (If it does have dependent objects, these would need to be deleted before this object could be deleted.) /// </summary> /// <returns></returns> public bool HasDependentObjects() { return(PerformanceMeasureActualUpdates.Any() || PerformanceMeasureExpectedUpdates.Any() || ProjectAttachmentUpdates.Any() || ProjectClassificationUpdates.Any() || ProjectContactUpdates.Any() || ProjectCustomAttributeUpdates.Any() || ProjectExemptReportingYearUpdates.Any() || ProjectExternalLinkUpdates.Any() || ProjectFundingSourceExpenditureUpdates.Any() || ProjectGeospatialAreaTypeNoteUpdates.Any() || ProjectGeospatialAreaUpdates.Any() || ProjectImageUpdates.Any() || ProjectLocationStagingUpdates.Any() || ProjectLocationUpdates.Any() || ProjectNoFundingSourceIdentifiedUpdates.Any() || ProjectNoteUpdates.Any() || ProjectOrganizationUpdates.Any() || ProjectRelevantCostTypeUpdates.Any() || (ProjectUpdate != null) || ProjectUpdateHistories.Any() || TechnicalAssistanceRequestUpdates.Any() || ProjectFundingSourceBudgetUpdates.Any()); }
/// <summary> /// Dependent type names of this entity /// </summary> public void DeleteChildren(DatabaseEntities dbContext) { foreach (var x in PerformanceMeasureActualUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectCustomAttributeUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectDocumentUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectExemptReportingYearUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectExternalLinkUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectFundingSourceUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectGrantAllocationExpenditureUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectGrantAllocationRequestUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectImageUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectLocationStagingUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectLocationUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectNoteUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectOrganizationUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectPersonUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectPriorityLandscapeUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectRegionUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectUpdates.ToList()) { x.DeleteFull(dbContext); } foreach (var x in ProjectUpdateHistories.ToList()) { x.DeleteFull(dbContext); } }
/// <summary> /// Active Dependent type names of this object /// </summary> public List <string> DependentObjectNames() { var dependentObjects = new List <string>(); if (PerformanceMeasureActualUpdates.Any()) { dependentObjects.Add(typeof(PerformanceMeasureActualUpdate).Name); } if (ProjectCustomAttributeUpdates.Any()) { dependentObjects.Add(typeof(ProjectCustomAttributeUpdate).Name); } if (ProjectDocumentUpdates.Any()) { dependentObjects.Add(typeof(ProjectDocumentUpdate).Name); } if (ProjectExemptReportingYearUpdates.Any()) { dependentObjects.Add(typeof(ProjectExemptReportingYearUpdate).Name); } if (ProjectExternalLinkUpdates.Any()) { dependentObjects.Add(typeof(ProjectExternalLinkUpdate).Name); } if (ProjectFundingSourceUpdates.Any()) { dependentObjects.Add(typeof(ProjectFundingSourceUpdate).Name); } if (ProjectGrantAllocationExpenditureUpdates.Any()) { dependentObjects.Add(typeof(ProjectGrantAllocationExpenditureUpdate).Name); } if (ProjectGrantAllocationRequestUpdates.Any()) { dependentObjects.Add(typeof(ProjectGrantAllocationRequestUpdate).Name); } if (ProjectImageUpdates.Any()) { dependentObjects.Add(typeof(ProjectImageUpdate).Name); } if (ProjectLocationStagingUpdates.Any()) { dependentObjects.Add(typeof(ProjectLocationStagingUpdate).Name); } if (ProjectLocationUpdates.Any()) { dependentObjects.Add(typeof(ProjectLocationUpdate).Name); } if (ProjectNoteUpdates.Any()) { dependentObjects.Add(typeof(ProjectNoteUpdate).Name); } if (ProjectOrganizationUpdates.Any()) { dependentObjects.Add(typeof(ProjectOrganizationUpdate).Name); } if (ProjectPersonUpdates.Any()) { dependentObjects.Add(typeof(ProjectPersonUpdate).Name); } if (ProjectPriorityLandscapeUpdates.Any()) { dependentObjects.Add(typeof(ProjectPriorityLandscapeUpdate).Name); } if (ProjectRegionUpdates.Any()) { dependentObjects.Add(typeof(ProjectRegionUpdate).Name); } if ((ProjectUpdate != null)) { dependentObjects.Add(typeof(ProjectUpdate).Name); } if (ProjectUpdateHistories.Any()) { dependentObjects.Add(typeof(ProjectUpdateHistory).Name); } return(dependentObjects.Distinct().ToList()); }
/// <summary> /// Does this object have any dependent objects? (If it does have dependent objects, these would need to be deleted before this object could be deleted.) /// </summary> /// <returns></returns> public bool HasDependentObjects() { return(PerformanceMeasureActualUpdates.Any() || ProjectCustomAttributeUpdates.Any() || ProjectDocumentUpdates.Any() || ProjectExemptReportingYearUpdates.Any() || ProjectExternalLinkUpdates.Any() || ProjectFundingSourceUpdates.Any() || ProjectGrantAllocationExpenditureUpdates.Any() || ProjectGrantAllocationRequestUpdates.Any() || ProjectImageUpdates.Any() || ProjectLocationStagingUpdates.Any() || ProjectLocationUpdates.Any() || ProjectNoteUpdates.Any() || ProjectOrganizationUpdates.Any() || ProjectPersonUpdates.Any() || ProjectPriorityLandscapeUpdates.Any() || ProjectRegionUpdates.Any() || (ProjectUpdate != null) || ProjectUpdateHistories.Any()); }
public void UpdateModel(List <PerformanceMeasureActualUpdate> currentPerformanceMeasureActualUpdates, IList <PerformanceMeasureActualUpdate> allPerformanceMeasureActualUpdates, IList <PerformanceMeasureActualSubcategoryOptionUpdate> allPerformanceMeasureActualSubcategoryOptionUpdates, ProjectUpdateBatch projectUpdateBatch) { var currentPerformanceMeasureActualSubcategoryOptionUpdates = currentPerformanceMeasureActualUpdates.SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList(); var performanceMeasureActualUpdatesUpdated = new List <PerformanceMeasureActualUpdate>(); if (PerformanceMeasureActualUpdates != null) { // Completely rebuild the list performanceMeasureActualUpdatesUpdated = PerformanceMeasureActualUpdates.Select(x => { var performanceMeasureActual = new PerformanceMeasureActualUpdate(x.PerformanceMeasureActualUpdateID, x.ProjectUpdateBatchID, x.PerformanceMeasureID, x.CalendarYear.Value, x.ActualValue); if (x.PerformanceMeasureActualSubcategoryOptionUpdates != null) { performanceMeasureActual.PerformanceMeasureActualSubcategoryOptionUpdates = x.PerformanceMeasureActualSubcategoryOptionUpdates.Where(pmavsou => ModelObjectHelpers.IsRealPrimaryKeyValue(pmavsou.PerformanceMeasureSubcategoryOptionID)) .Select( y => new PerformanceMeasureActualSubcategoryOptionUpdate(performanceMeasureActual.PerformanceMeasureActualUpdateID, y.PerformanceMeasureSubcategoryOptionID.Value, y.PerformanceMeasureID, y.PerformanceMeasureSubcategoryID)) .ToList(); } return(performanceMeasureActual); }).ToList(); } currentPerformanceMeasureActualUpdates.Merge(performanceMeasureActualUpdatesUpdated, allPerformanceMeasureActualUpdates, (x, y) => x.PerformanceMeasureActualUpdateID == y.PerformanceMeasureActualUpdateID, (x, y) => { x.CalendarYear = y.CalendarYear; x.ActualValue = y.ActualValue; }); currentPerformanceMeasureActualSubcategoryOptionUpdates.Merge( performanceMeasureActualUpdatesUpdated.SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList(), allPerformanceMeasureActualSubcategoryOptionUpdates, (x, y) => x.PerformanceMeasureActualUpdateID == y.PerformanceMeasureActualUpdateID && x.PerformanceMeasureSubcategoryID == y.PerformanceMeasureSubcategoryID && x.PerformanceMeasureID == y.PerformanceMeasureID, (x, y) => x.PerformanceMeasureSubcategoryOptionID = y.PerformanceMeasureSubcategoryOptionID); var currentProjectExemptYearUpdates = projectUpdateBatch.GetPerformanceMeasuresExemptReportingYears(); HttpRequestStorage.DatabaseEntities.ProjectExemptReportingYearUpdates.Load(); var allProjectExemptYearUpdates = HttpRequestStorage.DatabaseEntities.ProjectExemptReportingYearUpdates.Local; var projectExemptReportingYears = new List <ProjectExemptReportingYearUpdate>(); if (ProjectExemptReportingYearUpdates != null) { // Completely rebuild the list projectExemptReportingYears = ProjectExemptReportingYearUpdates.Where(x => x.IsExempt) .Select(x => new ProjectExemptReportingYearUpdate(x.ProjectExemptReportingYearUpdateID, x.ProjectUpdateBatchID, x.CalendarYear, ProjectExemptReportingType.PerformanceMeasures.ProjectExemptReportingTypeID)) .ToList(); } currentProjectExemptYearUpdates.Merge(projectExemptReportingYears, allProjectExemptYearUpdates, (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.CalendarYear == y.CalendarYear && x.ProjectExemptReportingTypeID == y.ProjectExemptReportingTypeID); projectUpdateBatch.PerformanceMeasureActualYearsExemptionExplanation = Explanation; }
public void UpdateModel(ProjectUpdateBatch projectUpdateBatch) { var allPerformanceMeasureReportingPeriods = HttpRequestStorage.DatabaseEntities.PerformanceMeasureReportingPeriods.ToList(); var performanceMeasureReportingPeriodsToAdd = new List <PerformanceMeasureReportingPeriod>(); if (PerformanceMeasureActualUpdates != null) { foreach (var performanceMeasureActualUpdateSimple in PerformanceMeasureActualUpdates) { var performanceMeasureReportingPeriod = allPerformanceMeasureReportingPeriods.SingleOrDefault(x => x.PerformanceMeasureReportingPeriodCalendarYear == performanceMeasureActualUpdateSimple.CalendarYear); if (performanceMeasureReportingPeriod == null) { Check.EnsureNotNull(performanceMeasureActualUpdateSimple.PerformanceMeasureID, "We need to have a performance measure."); performanceMeasureReportingPeriod = new PerformanceMeasureReportingPeriod((int)performanceMeasureActualUpdateSimple.PerformanceMeasureID, performanceMeasureActualUpdateSimple.CalendarYear, performanceMeasureActualUpdateSimple.CalendarYear.ToString()); performanceMeasureReportingPeriodsToAdd.Add(performanceMeasureReportingPeriod); } } } HttpRequestStorage.DatabaseEntities.AllPerformanceMeasureReportingPeriods.AddRange(performanceMeasureReportingPeriodsToAdd); HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted); var allPerformanceMeasureReportingPeriodsReloaded = HttpRequestStorage.DatabaseEntities.PerformanceMeasureReportingPeriods.ToList(); var performanceMeasureActualUpdatesUpdated = new List <PerformanceMeasureActualUpdate>(); if (PerformanceMeasureActualUpdates != null) { foreach (var performanceMeasureActualUpdateSimple in PerformanceMeasureActualUpdates) { var performanceMeasureReportingPeriod = allPerformanceMeasureReportingPeriodsReloaded.Single(x => x.PerformanceMeasureReportingPeriodCalendarYear == performanceMeasureActualUpdateSimple.CalendarYear); var performanceMeasureActual = new PerformanceMeasureActualUpdate( performanceMeasureActualUpdateSimple.PerformanceMeasureActualUpdateID, performanceMeasureActualUpdateSimple.ProjectUpdateBatchID, performanceMeasureActualUpdateSimple.PerformanceMeasureID, performanceMeasureActualUpdateSimple.ActualValue, performanceMeasureReportingPeriod.PerformanceMeasureReportingPeriodID); if (performanceMeasureActualUpdateSimple.PerformanceMeasureActualSubcategoryOptionUpdates != null) { AddPerformanceMeasureActualSubcategoryOptionUpdates(performanceMeasureActual, performanceMeasureActualUpdateSimple); } performanceMeasureActualUpdatesUpdated.Add(performanceMeasureActual); } } var listOfPerformanceMeasureActualUpdateIDsToMergeWith = performanceMeasureActualUpdatesUpdated .Select(x => x.PerformanceMeasureActualUpdateID).ToList(); var updateList = HttpRequestStorage.DatabaseEntities.PerformanceMeasureActualUpdates.Where(x => listOfPerformanceMeasureActualUpdateIDsToMergeWith.Contains(x.PerformanceMeasureActualUpdateID)).ToList(); var updateListOfIds = updateList.Select(x => x.PerformanceMeasureActualUpdateID).ToList(); var deleteList = projectUpdateBatch.PerformanceMeasureActualUpdates.Where(x => !listOfPerformanceMeasureActualUpdateIDsToMergeWith.Contains(x.PerformanceMeasureActualUpdateID)) .ToList(); var deleteListOfIds = deleteList.Select(x => x.PerformanceMeasureActualUpdateID).ToList(); updateListOfIds.AddRange(deleteListOfIds); var addList = performanceMeasureActualUpdatesUpdated .Where(x => !ModelObjectHelpers.IsRealPrimaryKeyValue(x.PerformanceMeasureActualUpdateID) || !updateListOfIds.Contains(x.PerformanceMeasureActualUpdateID)).ToList(); foreach (var performanceMeasureActualUpdate in updateList) { var update = performanceMeasureActualUpdatesUpdated.Single(x => x.PerformanceMeasureActualUpdateID == performanceMeasureActualUpdate.PerformanceMeasureActualUpdateID); performanceMeasureActualUpdate.PerformanceMeasureReportingPeriodID = update.PerformanceMeasureReportingPeriodID; performanceMeasureActualUpdate.ActualValue = update.ActualValue; } HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted); deleteList.ForEach(x => x.DeleteFull(HttpRequestStorage.DatabaseEntities)); HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted); HttpRequestStorage.DatabaseEntities.AllPerformanceMeasureActualUpdates.AddRange(addList); HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted); var listOfOptionsToAdd = performanceMeasureActualUpdatesUpdated.SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList(); var listOfOptionsToDelete = projectUpdateBatch.PerformanceMeasureActualUpdates .SelectMany(x => x.PerformanceMeasureActualSubcategoryOptionUpdates).ToList(); listOfOptionsToDelete.ForEach(x => x.DeleteFull(HttpRequestStorage.DatabaseEntities)); HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted); HttpRequestStorage.DatabaseEntities.AllPerformanceMeasureActualSubcategoryOptionUpdates.AddRange(listOfOptionsToAdd); HttpRequestStorage.DatabaseEntities.SaveChanges(IsolationLevel.ReadUncommitted); var databaseEntities = HttpRequestStorage.DatabaseEntities; var currentProjectExemptYearUpdates = projectUpdateBatch.GetPerformanceMeasuresExemptReportingYears(); databaseEntities.ProjectExemptReportingYearUpdates.Load(); var allProjectExemptYearUpdates = databaseEntities.AllProjectExemptReportingYearUpdates.Local; var projectExemptReportingYears = new List <ProjectExemptReportingYearUpdate>(); if (ProjectExemptReportingYearUpdates != null) { // Completely rebuild the list projectExemptReportingYears = ProjectExemptReportingYearUpdates.Where(x => x.IsExempt) .Select(x => new ProjectExemptReportingYearUpdate(x.ProjectExemptReportingYearUpdateID, x.ProjectUpdateBatchID, x.CalendarYear, ProjectExemptReportingType.PerformanceMeasures.ProjectExemptReportingTypeID)) .ToList(); } currentProjectExemptYearUpdates.Merge(projectExemptReportingYears, allProjectExemptYearUpdates, (x, y) => x.ProjectUpdateBatchID == y.ProjectUpdateBatchID && x.CalendarYear == y.CalendarYear && x.ProjectExemptReportingTypeID == y.ProjectExemptReportingTypeID, HttpRequestStorage.DatabaseEntities); projectUpdateBatch.PerformanceMeasureActualYearsExemptionExplanation = Explanation; }