private void ConstructModel() { switch (AccountOwnerPartialViewType) { case AccountOwnerPartialViewType.Undefined: break; case AccountOwnerPartialViewType.ForAccount: try { // Если модель должна быть сформирована в виде "показать всех подписчиков счёта", тогда // в списке Accounts все элементы будут одинаковые - один и тот же новер счёта. var acc = CurrentAccount = Accounts.GroupBy(x => x.ID).Single().FirstOrDefault(); // "превращаем" все эти одинаковые элементы в один элемент if (acc != null) { // Если всё прошло нормально - формируем список "пользователь счёта acc - права пользователя на этот счёт" var list = (from right in AccountUserRights let listItemOwner = Owners.FirstOrDefault(x => x.UserId == right.Item1) select new Tuple <AccountUserModel, UserAccountRights>(listItemOwner, right.Item2)).ToList(); // Заполняем кортеж "ForAccount", которая будет использоваться в представлении "AccountOwnerPartialForAccount" ForAccount = new Tuple <Account, List <Tuple <AccountUserModel, UserAccountRights> > >(acc, list); } } #region catch (InvalidOperationException ex) { Logger.Error( "ConstructModel() - при формировании модели для представления AccountOwner, при просмотре управляющих счёта, " + "было переданно больше одного счёта или не одного", ex); } catch (Exception ex) { Logger.Error("ConstructModel() - Не найдено счёта", ex); } #endregion break; case AccountOwnerPartialViewType.ForOwner: try { // всё аналогично вредыдущему случаю "case" var own = CurrentOwner = Owners.GroupBy(x => x.Title).Single().FirstOrDefault(); if (own != null) { var list = (from right in AccountUserRights let listItemAccount = Accounts.FirstOrDefault(x => x.ID == right.Item1) select new Tuple <Account, UserAccountRights>(listItemAccount, right.Item2)).ToList(); ForUser = new Tuple <AccountUserModel, List <Tuple <Account, UserAccountRights> > >(own, list); } } #region catch (InvalidOperationException ex) { Logger.Error("ConstructModel() - при формировании модели для представления AccountOwner, при просмотре счетов управляющего, " + "было переданно больше одного управляющего или не одного", ex); } catch (Exception ex) { Logger.Error("ConstructModel() - Не найдено пользователя", ex); } #endregion break; } }