Построение ViewModel на фабрике из анонимного типа - PullRequest
2 голосов
/ 18 марта 2019

Я передаю свои данные в мое приложение как анонимный тип, чтобы каждый раз не выбирать всю строку;просто получаю то, что мне нужно.

Поскольку я не могу связать свой GridView с анонимным типом (который я знаю), я передаю анонимный тип на фабрику, которая создает ViewModel и возвращает его, поэтому яесть что связать с.

То, что я делал перед реализацией фабрики, это выбор данных в новую модель представления и получение списка:

using (var db = new ApplicationDbContext())
{
    var timesheets = db.Timesheets.Where(x => x.StaffMember.Id == userId && !x.Deleted)
        .Select(x => new { x.Id, x.DateAdded, x.DateCompleted, x.Approved, x.Company.TradingName, x.StartTime, x.EndTime }).ToList();

    return timesheets.Select(x => new TimesheetListViewModel
    {
        Approved = x.Approved,
        CompanyName = x.TradingName,
        DateAdded = x.DateAdded,
        Completed = (x.DateCompleted.HasValue) ? DateTime.Parse(x.DateCompleted.ToString()) : DateTime.MinValue,
        Id = x.Id,
        StaffCanEdit = (x.EndTime == null),
        StartTime = TimeSpan.Parse(x.StartTime.ToString()),
        EndTime = (x.EndTime.HasValue) ? TimeSpan.Parse(x.EndTime.ToString()) : TimeSpan.MinValue
    }).ToList();
}

На данный момент, я думаю, вы 'Согласен, здесь слишком много разборов, чтобы быть жизнеспособными в сервисе, поэтому реализация на заводе предназначена для того, чтобы очистить эту работу от сервиса.

Я пытался сделать это двумя способами:

Первый способ - передача свойств на фабрику:

var factory = new TimesheetViewModelsFactory();
using (var db = new ApplicationDbContext())
{
    var timesheets = db.Timesheets.Where(x => x.StaffMember.Id == userId && !x.Deleted)
        .Select(x => new { x.Id, x.DateAdded, x.DateCompleted, x.Approved, x.Company.TradingName, x.StartTime, x.EndTime }).TOList();

    return timesheets.Select(x => factory.GetListViewModel(x.Id, x.DateAdded, x.DateCompleted, x.Approved, x.TradingName, x.StartTime, x.EndTime).ToList();
}

Проблема заключалась в том, что функция не имела метода .ToList() или чего-то подобного, поэтому она не была жизнеспособной, и затем я подумал, чтоесли я только что передал timesheets через?

Второй способ - передача анонимного типа расписания на фабрику:

var factory = new TimesheetViewModelsFactory();
using (var db = new ApplicationDbContext())
{
    var timesheets = db.Timesheets.Where(x => x.StaffMember.Id == userId && !x.Deleted)
        .Select(x => new { x.Id, x.DateAdded, x.DateCompleted, x.Approved, x.Company.TradingName, x.StartTime, x.EndTime }).TOList();

    return factory.GetListViewModel(timesheets);
}

На этом этапе у меня теперь есть следующий метод, сгенерированный на моей фабрикеот этот вызов:

internal List<TimesheetListViewModel> GetListViewModel(List<object> timesheets)
{
    throw new NotImplementedException();
}

Я не знаю, как с этим работать ...

Я просто перебираю каждый элемент в timesheets и преобразую его в объект расписания,затем сопоставить это с моделью представления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...