我将数据作为匿名类型传递到我的应用程序,以避免每次选择整个行;刚得到我需要的东西。
由于我无法将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
中的每个项目并将其转换为时间表对象,然后将其映射到视图模型?