【问题标题】:Moving some models to ViewModel将一些模型移动到 ViewModel
【发布时间】:2017-10-30 21:31:24
【问题描述】:

我有与 db 表相关的 Logging 模型

代码如下:

public partial class Logging
{
    public string Imei { get; set; }
    public DateTime CurDateTime { get; set; }
    public Nullable<System.DateTime> GPSDateTime2 { get; set; }
    public Nullable<decimal> Latitude2 { get; set; }
    public Nullable<decimal> Longitude2 { get; set; }
    public int Speed { get; set; }
    public Nullable<int> Datatype { get; set; }
    public int Id { get; set; }

}

我想计算差异并决定创建 ViewModel

这里是代码

 public class HeatmapViewModel:Logging
{
    public TimeSpan? FirstStartDifference
    {
        get
        {
            if (CurDateTime != null)
            {
                var midnight = new DateTime(CurDateTime.Year, CurDateTime.Month, CurDateTime.Day, 00, 00, 00);
                var difference = CurDateTime - midnight;
                return difference;
            }
            return null;
        }
    }
    public TimeSpan? LastStartDifference
    {
        get
        {
            if (CurDateTime != null)
            {
                var midnight = new DateTime(CurDateTime.Year, CurDateTime.Month, CurDateTime.Day, 23, 59, 00);
                var difference = midnight - CurDateTime;
                return difference;
            }
            return null;
        }
    }
    public int coeff = 2;
    public int Difference;
}

在后端我有这个方法

List<HeatmapViewModel> items = new List<HeatmapViewModel>();

            var firstitem = ctx.Loggings.Where(x => x.Datatype == 2).AsEnumerable().Select(
                x => new HeatmapViewModel
                {
                    Longitude2 = x.Longitude2,
                    Latitude2 = x.Latitude2,
                    Difference = (int)(x.FirstStartDifference?.TotalMinutes ?? -1) * x.coeff

                }).FirstOrDefault();
            var lastItem = ctx.Loggings.Where(x => x.Datatype == 2).AsEnumerable().Select(
                x => new HeatmapViewModel
                {
                    Longitude2 = x.Longitude2,
                    Latitude2 = x.Latitude2,
                    Difference = (int)(x.LastStartDifference?.TotalMinutes ?? -1) * x.coeff

                }).LastOrDefault();

但是在这一行Difference = (int)(x.FirstStartDifference?.TotalMinutes ?? -1) * x.coeff,我有错误

严重性代码描述项目文件行抑制状态 错误 CS1061“Logging”不包含“FirstStartDifference”的定义,并且找不到接受“Logging”类型的第一个参数的扩展方法“FirstStartDifference”(您是否缺少 using 指令或程序集引用?) Heatmap C:\ Users\nemes\source\repos\Heatmap\Heatmap\Controllers\HomeController.cs 28 活动

我如何使用来自 VIewModel 的属性

【问题讨论】:

  • 假设 Loggings 是 Logging 类型实例的集合,那么您尝试在每个日志记录实例上使用属性 FirstStartDifference,但该属性不存在。
  • 您似乎正在从数据上下文中获取 Logging 记录,而第一个 Logging 类没有该属性。你的意思是让你的第二个 Logging 类成为 partial class 以扩展第一个类吗?

标签: c# asp.net asp.net-mvc


【解决方案1】:

改用多行 lambda:

var firstitem = Loggings.Where(x => x.Datatype == 2).AsEnumerable().Select(
x =>
{
    var vm = new HeatmapViewModel
    {
        Longitude2 = x.Longitude2,
        Latitude2 = x.Latitude2
    };
    vm.Difference = (int)(vm.FirstStartDifference?.TotalMinutes ?? -1) * vm.coeff;
    return vm;
}).FirstOrDefault();

注意:请阅读帖子下方的 cmets,因为您正在混合类型。变量x 的类型为Logging

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 2013-07-02
    • 2015-07-04
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多