【问题标题】:Assign value to new List property (ASP.NET MVC)为新的 List 属性赋值 (ASP.NET MVC)
【发布时间】:2018-04-13 13:43:47
【问题描述】:

我有表类 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
{
    public decimal? Latitude2 { get; set; }
    public decimal? Longitude2 { get; set; }
    public int FirstStartDifference { get; set; }
    public int LastStartDifference { get; set; }
    public int coeff = 2;
    public int Difference;
}

我在存储库中有方法,我可以在其中进行所有计算

这里是代码

var allitems = ctx.Loggings.AsEnumerable().Select(
                x => new Logging
                {
                    Longitude2 = x.Longitude2,
                    Latitude2 = x.Latitude2,
                    CurDateTime = x.CurDateTime,
                    Datatype = x.Datatype

                });
            var filteredQuery = allitems.Where(x => x.Datatype == 1 || x.Datatype == 2).OrderByDescending(x => x.Id).ToList();
            for (int i = 1; i < filteredQuery.Count; i++)
            {
                if (filteredQuery[i].Datatype == 2 && filteredQuery[i - 1].Datatype == 1)
                {
                    TimeSpan differenceTicks = filteredQuery[i].CurDateTime - filteredQuery[i - 1].CurDateTime;
                    var differenceInMinutes = (int) differenceTicks.TotalMinutes;

                }
            }

            items.Add(new HeatmapViewModel
            {
                Latitude2 = allitems.Longitude2,
                Longitude2 = allitems.Longitude2,
                Difference = differenceInMinutes
            });

我对这段代码有问题:

  items.Add(new HeatmapViewModel
            {
                Latitude2 = allitems.Longitude2,
                Longitude2 = allitems.Longitude2,
                Difference = differenceInMinutes
            });

这是错误:

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

严重性代码描述项目文件行抑制状态 错误 CS1061“IEnumerable”不包含“Longitude2”的定义,并且找不到接受“IEnumerable”类型的第一个参数的扩展方法“Longitude2”(您是否缺少 using 指令或程序集引用?)热图 C:\用户\nemes\source\repos\Heatmap\Heatmap\Repository\HeatmapRepository.cs 92 活动 严重性代码 描述 项目文件行抑制状态 错误 CS0103 当前上下文 Heatmap C:\Users\nemes\source\repos\Heatmap\Heatmap\Repository\HeatmapRepository.cs 93 Active

中不存在名称“differenceInMinutes”

我该如何解决?

【问题讨论】:

  • 为什么你有第一个查询 - 用 var allitems = ctx.Loggings; 替换它并且你需要在 for 循环中添加 HeatmapViewModel 的实例(假设 items 是 @987654329 @)
  • 好的。关于第一个查询理解,我的错。但是我需要如何添加HeatmapViewModel 的实例呢? @StephenMuecke
  • 在您的 if 块内 - items.Add(new HeatmapViewModel{ Latitude2 = filteredQuery[i].Latitude2, ...., Difference = differenceInMinutes});
  • 您确实意识到这只会为每个第二个项目生成一个 HeatmapViewModel,因为您的 if 块(假设查询中的每个项目的 Datatype 值交替)。很难理解你在这里真正想做什么

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


【解决方案1】:

您的问题是:allitemsIEnumerable,因此您不能使用 allitems.Longitude2 来获取 Longitude2 的值。这不是一个单一的项目。

我认为你应该把 items.Add(...) 块放到 for 循环中。

并使用filteredQuery[i].Longitude2 而不是allitems.Longitude2

这样

       var filteredQuery = (
                            from log in ctx.Loggings
                            where log.Datatype == 1 || log.Datatype == 2
                            orderby log.Id descending
                            select log
                            ).ToList();

        var items = new List<HeatmapViewModel>();

        for (int i = 1; i < filteredQuery.Count; i++)
        {
            if (filteredQuery[i].Datatype == 2 && filteredQuery[i - 1].Datatype == 1)
            {
                TimeSpan differenceTicks = filteredQuery[i].CurDateTime - filteredQuery[i - 1].CurDateTime;

                items.Add(new HeatmapViewModel
                {
                    Latitude2 = filteredQuery[i].Longitude2,
                    Longitude2 = filteredQuery[i].Longitude2,
                    Difference = (int)differenceTicks.TotalMinutes
                });
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2021-03-04
    相关资源
    最近更新 更多