private IList<IInputOutputViewModel> ReconcileExistingAndMasterView(IList<IInputOutputViewModel> masterView, IEnumerable<IInputOutputViewModel> existingView)
{
var equalityCompareImpl = new InputOutputViewModelEqualityComparer();
var intersectionResult = existingView.Intersect(masterView, equalityCompareImpl);
IEnumerable<IInputOutputViewModel> inputOutputViewModels = intersectionResult as IList<IInputOutputViewModel> ?? intersectionResult.ToList();
foreach(var intersectionRowItem in inputOutputViewModels)
{
// Find a match in master list and tranfer properties ;)
var match = masterView.FirstOrDefault(c => c.DisplayName == intersectionRowItem.DisplayName);
if(match != null)
{
intersectionRowItem.Required = match.Required;
intersectionRowItem.DefaultValue = match.DefaultValue;
}
}
// ordering maters ;)
IList<IInputOutputViewModel> result = inputOutputViewModels.Union(masterView, equalityCompareImpl).ToList();
return result;
}