Я передаю свои данные в мое приложение как анонимный тип, чтобы каждый раз не выбирать всю строку;просто получаю то, что мне нужно.
Поскольку я не могу связать свой 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
и преобразую его в объект расписания,затем сопоставить это с моделью представления?