使用从LINQ到Entites的数据填充包含其他ViewModel的ViewModel

马修·韦斯特雷特(Matthew Verstraete)

我刚刚完成了第一个综合体的构建,那么我认为它很复杂ViewModel它包含嵌套ViewModels,我很难弄清楚如何使用来填充数据LINQ to Entities我应该如何填满整个图表?

我的ViewMode:

public class TimesheetWeeklyTableVM
{
    public int TimesheetHeaderID { get; set; }
    //public DateTime weekEndingDate { get; set; }
    public decimal TotalWeekHours { get; set; }

    public List<TimesheetDailyVM> DaysOfWeek { get; set; }

    public TimesheetWeeklyTableVM(DateTime weekEndingDate)
    {
        DaysOfWeek = new List<TimesheetDailyVM>();

        for (var i = 6; i >= 0; i--)
        {
            DaysOfWeek.Add(new TimesheetDailyVM()
            {
                CurrentDate = weekEndingDate.AddDays(-i)
            });
        }
    }
}

public class TimesheetDailyVM
{
    public DateTime CurrentDate { get; set; }

    public double TotalHours
    {
        get
        {
            return TimeSpan.FromSeconds(Tasks.Sum(p => (p.StartDateTime - p.EndDateTime).TotalSeconds)).TotalHours;
        }
    }

    public IEnumerable<TimesheetDailyHoursVM> Tasks { get; set; }

    public TimesheetDailyVM()
    {
        Tasks = new List<TimesheetDailyHoursVM>();
    }
}

public class TimesheetDailyHoursVM
{
    public int TimesheetID { get; set; }
    public DateTime StartDateTime { get; set; }
    public DateTime EndDateTime { get; set; }
    public string ProjectCode { get; set; }
    public string ProjectDescription { get; set; }
    public string TaskCode { get; set; }
    public string TaskDescription { get; set; }
}

我将要提取的数据表中的实体:

public class TimesheetHeader
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public int EmployeeID { get; set; }
    public DateTime WeekEndingDate { get; set; }
    public decimal TotalHours { get; set; }
    public int CurrentStatusID { get; set; }

    public decimal OtherPay { get; set; }
    public int? ApprovedByID { get; set; }
    public DateTime? DateSubmitted { get; set; }
    public DateTime? DateApproved { get; set; }

    [Column(TypeName = "varchar(MAX)")]
    public string ManagerNotes { get; set; }

    [ForeignKey("EmployeeID")]
    public Employee Employee { get; set; }

    [ForeignKey("ApprovedByID")]
    public Employee ApprovedBy { get; set; }

    [ForeignKey("CurrentStatusID")]
    public StatusOption CurrentStatus { get; set; }
}

public class Timesheet
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public int TimesheetHeaderID { get; set; }
    public DateTime StartDateTime { get; set; }
    public DateTime EndDateTime { get; set; }
    public string ProjectCode { get; set; }
    public string TaskCode { get; set; }

    [Column(TypeName = "varchar(MAX)")]
    public string WorkDescription { get; set; }

    [ForeignKey("TimesheetHeaderID")]
    public TimesheetHeader TimesheetHeader { get; set; }
}

到目前为止,我要填写的代码:

            var weekEndingDate = TimesheetHelper.GetWeekEndingDate(date);

            using (var db = new JobSightDbContext())
            {
                var model = db.TimesheetHeaders
                              .Where(timesheet => timesheet.WeekEndingDate == weekEndingDate)
                              .Select(timesheet => new TimesheetWeeklyTableVM(weekEndingDate)
                              {
                                  TimesheetHeaderID = timesheet.ID,
                                  TotalWeekHours = timesheet.TotalHours
                              }).FirstOrDefault();

                model.DaysOfWeek = db.Timesheets
                                     .Where(timesheet => timesheet.TimesheetHeaderID == model.TimesheetHeaderID)
                                     .OrderBy(timesheet => timesheet.StartDateTime)
                                     .Select(timesheet => new TimesheetDailyVM()
                                     {   
                                         Tasks.TimesheetID = timesheet.ID,
                                         StartDateTime = timesheet.StartDateTime,
                                         EndDateTime = timesheet.EndDateTime,
                                         ProjectCode = timesheet.ProjectCode,
                                         TaskCode = timesheet.TaskCode
                                     }).ToList();

                return PartialView(model);
            }

这段代码给我错误“在当前上下文中不存在名称'Tasks'。无效的初始化成员声明”和“ TimesheeDailyVM不包含'XXX'的定义”的错误。

如果我尝试插入case,TimesheetDailyHoursVM那么我会得到一个隐式转换错误。

用户名

假设要显示一周中每一天的记录,则需要Timesheet按日期记录进行分组,并将每个对应的组添加到对应日期的关联Tasks属性中

var timeRecords = db.Timesheets
    .Where(x => x.TimesheetHeaderID == model.TimesheetHeaderID)
    .Groupby(x => x.StartDateTime);

foreach(var group in timeRecords)
{
    var index = // see notes below
    model.DaysOfWeek[index].Tasks = group.Select(x => new TimesheetDailyHoursVM()
    {
        TimesheetID = x.ID,
        StartDateTime = x.StartDateTime,
        ....
    });
}

另外,在上述,index需要可以基于group.Key其是StartDateTime通常这是

index = group.Key.DayOfWeek;

这将是0星期日,1星期一等,但是在您的代码中您使用

for (var i = 6; i >= 0; i--)
{
    DaysOfWeek.Add(new TimesheetDailyVM()
    {
        CurrentDate = weekEndingDate.AddDays(-i)
    });
}

还不清楚第一天是否实际上是星期日

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从其他ViewModel访问数据?

来自分类Dev

如何从其他ViewModel访问数据?

来自分类Dev

使用Viewmodel填充sql数据并添加列

来自分类Dev

从数据库模型填充ViewModel

来自分类Dev

SwiftUI将数据传递到ViewModel

来自分类Dev

Knockout.js数据绑定到ViewModel

来自分类Dev

敲除数据绑定到 viewModel

来自分类Dev

从 Android 项目到 ViewModel 的数据绑定

来自分类Dev

如何使用其他2类模型创建List <ViewModel>?MVC ASP.NET

来自分类Dev

RxSwift:如何使用ViewModel在表格视图内的集合视图单元格中填充数据?

来自分类Dev

将Kendo UI下拉列表绑定到由数据源填充的ViewModel的最佳方法是什么?

来自分类Dev

将Kendo UI下拉列表绑定到由数据源填充的ViewModel的最佳方法是什么?

来自分类Dev

如何使用EF / LINQ从其他表中获取数据

来自分类Dev

在ZK中,从其他ViewModel更改组件的属性

来自分类Dev

UWP C#MVVM如何从其他页面访问ViewModel

来自分类Dev

无法从Android项目中的其他模块注入ViewModel

来自分类Dev

通过其他View或ViewModel设置UserControl的属性

来自分类Dev

在其他视图内的ViewModel中设置属性

来自分类Dev

在ZK中,从其他ViewModel更改组件的属性

来自分类Dev

使用IsSynchronizedWithCurrentItem绑定到ViewModel中的集合

来自分类Dev

使用敲除将列表绑定到Viewmodel

来自分类Dev

使用ViewModel发布到模型中

来自分类Dev

RecyclerView仅在方向更改后才从ViewModel填充数据

来自分类Dev

用 ViewModel 中的数据填充 @Html.DropDownListFor

来自分类Dev

数据未使用 Ajax 传递到其他页面

来自分类Dev

从ControlTemplate绑定到ViewModel

来自分类Dev

绑定到ViewModel的集合

来自分类Dev

从ControlTemplate绑定到ViewModel

来自分类Dev

MVC-使用ViewModel在部分视图中填充数据库中的两个下拉列表

Related 相关文章

  1. 1

    如何从其他ViewModel访问数据?

  2. 2

    如何从其他ViewModel访问数据?

  3. 3

    使用Viewmodel填充sql数据并添加列

  4. 4

    从数据库模型填充ViewModel

  5. 5

    SwiftUI将数据传递到ViewModel

  6. 6

    Knockout.js数据绑定到ViewModel

  7. 7

    敲除数据绑定到 viewModel

  8. 8

    从 Android 项目到 ViewModel 的数据绑定

  9. 9

    如何使用其他2类模型创建List <ViewModel>?MVC ASP.NET

  10. 10

    RxSwift:如何使用ViewModel在表格视图内的集合视图单元格中填充数据?

  11. 11

    将Kendo UI下拉列表绑定到由数据源填充的ViewModel的最佳方法是什么?

  12. 12

    将Kendo UI下拉列表绑定到由数据源填充的ViewModel的最佳方法是什么?

  13. 13

    如何使用EF / LINQ从其他表中获取数据

  14. 14

    在ZK中,从其他ViewModel更改组件的属性

  15. 15

    UWP C#MVVM如何从其他页面访问ViewModel

  16. 16

    无法从Android项目中的其他模块注入ViewModel

  17. 17

    通过其他View或ViewModel设置UserControl的属性

  18. 18

    在其他视图内的ViewModel中设置属性

  19. 19

    在ZK中,从其他ViewModel更改组件的属性

  20. 20

    使用IsSynchronizedWithCurrentItem绑定到ViewModel中的集合

  21. 21

    使用敲除将列表绑定到Viewmodel

  22. 22

    使用ViewModel发布到模型中

  23. 23

    RecyclerView仅在方向更改后才从ViewModel填充数据

  24. 24

    用 ViewModel 中的数据填充 @Html.DropDownListFor

  25. 25

    数据未使用 Ajax 传递到其他页面

  26. 26

    从ControlTemplate绑定到ViewModel

  27. 27

    绑定到ViewModel的集合

  28. 28

    从ControlTemplate绑定到ViewModel

  29. 29

    MVC-使用ViewModel在部分视图中填充数据库中的两个下拉列表

热门标签

归档