使用 LINQ 计算与前一项的差异

2023-12-09

我正在尝试使用 LINQ 为图表准备数据。

我无法解决的问题是如何计算“与之前的差异”。

我期望的结果是

ID= 1,日期= 现在,DiffToPrev= 0;

ID= 1,日期= 现在+1,DiffToPrev= 3;

ID= 1,日期= 现在+2,DiffToPrev= 7;

ID= 1,日期= 现在+3,DiffToPrev= -6;

etc...

你能帮我创建这样一个查询吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    public class MyObject
    {
        public int ID { get; set; }
        public DateTime Date { get; set; }
        public int Value { get; set; }
    }

    class Program
    {
        static void Main()
        {
               var list = new List<MyObject>
          {
            new MyObject {ID= 1,Date = DateTime.Now,Value = 5},
            new MyObject {ID= 1,Date = DateTime.Now.AddDays(1),Value = 8},
            new MyObject {ID= 1,Date = DateTime.Now.AddDays(2),Value = 15},
            new MyObject {ID= 1,Date = DateTime.Now.AddDays(3),Value = 9},
            new MyObject {ID= 1,Date = DateTime.Now.AddDays(4),Value = 12},
            new MyObject {ID= 1,Date = DateTime.Now.AddDays(5),Value = 25},
            new MyObject {ID= 2,Date = DateTime.Now,Value = 10},
            new MyObject {ID= 2,Date = DateTime.Now.AddDays(1),Value = 7},
            new MyObject {ID= 2,Date = DateTime.Now.AddDays(2),Value = 19},
            new MyObject {ID= 2,Date = DateTime.Now.AddDays(3),Value = 12},
            new MyObject {ID= 2,Date = DateTime.Now.AddDays(4),Value = 15},
            new MyObject {ID= 2,Date = DateTime.Now.AddDays(5),Value = 18}

        };

            Console.WriteLine(list);   

            Console.ReadLine();
        }
    }
}

一种选择(对于 LINQ to Objects)是创建您自己的 LINQ 运算符:

// I don't like this name :(
public static IEnumerable<TResult> SelectWithPrevious<TSource, TResult>
    (this IEnumerable<TSource> source,
     Func<TSource, TSource, TResult> projection)
{
    using (var iterator = source.GetEnumerator())
    {
        if (!iterator.MoveNext())
        {
             yield break;
        }
        TSource previous = iterator.Current;
        while (iterator.MoveNext())
        {
            yield return projection(previous, iterator.Current);
            previous = iterator.Current;
        }
    }
}

这使您能够仅使用源序列的一次传递来执行投影,这始终是一个好处(想象一下在一个大日志文件上运行它)。

请注意,它将投影一个长度序列n转化为长度序列n-1- 例如,您可能想在第一个元素前面添加一个“虚拟”元素。 (或者更改方法以包含其中一种。)

以下是如何使用它的示例:

var query = list.SelectWithPrevious((prev, cur) =>
     new { ID = cur.ID, Date = cur.Date, DateDiff = (cur.Date - prev.Date).Days) });

请注意,这将包括一个 ID 的最终结果和下一个 ID 的第一个结果...您可能希望首先按 ID 对序列进行分组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LINQ 计算与前一项的差异 的相关文章

  • 如何将 XML 中的数据添加到列表<>?

    我尝试从 xml 文件中读取数据 但它非常笨拙 而且我获得的很多数据都是从孩子那里获取的 我将姓名 年龄等信息集中在一起 因此无法将其添加到列表中 我的 xml 文件如下所示
  • C#/Linq 获取相邻的集合

    我有一个有序列表 例如 0 1 2 6 7 10 我想要得到数字加 1 的集合 我想要第一个数字和计数或系列 所以我会得到开始 0 计数 3开始 6 计数 2开始 10 计数 1 我怎样才能在 C 中做到这一点 答案是我认为最好的方式 对我
  • NHibernate.Linq 类似

    如何使用 NHibernate Linq 生成此查询 WHERE this Name LIKE p0 p0 test Notice NO wild card 请注意 这不是 Linq To Sql 或实体框架 这就是 NHibernate
  • 使用 lambda 从数组中选择每隔一个元素[重复]

    这个问题在这里已经有答案了 C 4 0 如何使用 lambda 表达式完成以下操作 int a new int 8 0 1 2 3 4 5 6 7 Now fetch every second element so that we get
  • XML 到 IEnumerable

    有没有办法获取给定的 XML 文件并将其转换 最好使用 C 泛型 为 T 的具体可枚举列表 其中 T 是我的具体类 例如 我可能有一个 XML 文件 例如
  • 使用 difftool 比较同一文件的暂存版本和未暂存版本之间的差异[重复]

    这个问题在这里已经有答案了 有没有办法查看之间的差异staged and unstaged同一文件的版本 例如 Changes to be committed modified conf application conf Changes n
  • 使用 LINQ 和 C# 的随机数组

    我在 MSDN 杂志上读到一篇关于使用LINQ 中的枚举类 http msdn microsoft com en us magazine cc700332 aspx生成随机数组 本文使用 VB NET 我不能立即确定 C 中的等效项是什么
  • NHibernate:QueryOver<> 帮助

    我刚刚开始使用 NHibernate 在运行更复杂的查询时遇到了麻烦 我有带有附加标签列表的实体 用户将提供两个标签列表 包括和排除 我需要找到具有所有包含标签的所有实体 并排除在排除列表中具有任何标签的任何实体 下面是我的第一个努力 这显
  • .net MVC、SelectList 和 LINQ

    我刚开始在 MVC 框架中使用 Html DropDownList 并且很难理解如何从数据库中选择数据以绑定到 DropDownList 有没有一种简单的方法可以从标准 LINQ 查询返回可绑定列表 例如 SelectList Select
  • 更新后 LINQ to SQL 返回旧数据

    我有一个使用 LINQ to SQL 连接到数据库的应用程序 我在获取 LINQ to SQL 返回正确的新更新数据时遇到问题 发生的情况是 我更改了 UI 上的字段 LINQ to SQL 生成更新语句 并将新数据存储在数据库中 但是 此
  • 如何按双精度值对 List 进行排序?

    这听起来很简单 但其实没那么简单 我想根据 T 的一个属性 double 类型 来排序 List 如果您在编译前知道属性名称 myList myList OrderBy a gt a propertyName ToList or myLis
  • 如何以统一的 diff 格式打印两个多行字符串的比较?

    您知道有什么图书馆可以帮助做到这一点吗 我会编写一个函数 以统一的 diff 格式打印两个多行字符串之间的差异 像这样的东西 def print differences string1 string2 Prints the comparis
  • Linq for xml 解析返回 null 元素

    我的 xml 文件如下所示
  • Perforce Excel 文件差异

    我有一堆 excel 文件放在 perforce 上 我想对这些 excel 文件进行 diff 类似于我在 perforce 中对其他文件 如 java cs 等 所做的操作 我尝试寻找一个插件 发现 P4OFC 只适合对 word 文件
  • int -> int list 与类型 int -> IEnumerable<'a> 不兼容

    Given open System Linq 这是一个可以接受的表达方式 2 3 4 SelectMany fun n gt 1 n 但这不是 2 3 4 SelectMany fun n gt 1 n 错误消息显示 int gt int
  • hg 或 git 中的两个完整目录/项目之间存在差异?

    我继承了一个最初存储在 CVS 中的项目以及所有修订 我做了相当多的编辑 并且我试图比较我在原始目录中所做的所有更改 关于添加的新文件与旧文件 hg git 是否有某种实用程序可以让我进行树差异或类似性质的操作 也就是说 新添加的文件 删除
  • 有没有可以在 HTML 文档之间进行比较的 ruby​​ gem?

    事实证明 对两个不同的 html 文档进行比较是一个完全不同的问题 而不仅仅是对纯文本进行比较 例如 如果我在以下之间进行简单的 LCS 差异 Google and Google diff 结果不是 but a gt github com
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何使用 LINQ 获取 Count() 的 Max()

    我是 LINQ 新手 我遇到了这种情况 我有这张表 ID Date Range 1 10 10 10 9 10 2 10 10 10 9 10 3 10 10 10 9 10 4 10 10 10 8 9 5 10 11 10 1 2 6
  • Perforce - 如何获取已本地修改的文件列表?

    我正在寻找一个 perforce 命令来获取已在本地修改且 未 签入存储库的文件列表 我知道我 应该 获取待处理更改列表中的已修改文件列表 但在某些情况下我看不到该列表中的已修改文件 然后 在 手动 检查文件并进行比较时 我意识到了差异 是

随机推荐

  • 装饰一个方法

    在我的 Python 应用程序中 我使用事件在不同插件之间进行通信 现在 我想我可以使用装饰器来为我做这件事 而不是手动注册事件的方法 我想让它看起来像这样 events listento event name def myClassMet
  • 使用 chrome.socket API 构建 Web 服务器

    我使用 Chrome 打包应用程序构建了一个网络服务器 我反复看到的问题是 chrome socket accept 和 chrome socket write 不调用它们的回调函数 如果请求率低于每秒 1 个请求 它通常或多或少会可靠地工
  • C# 可能错误的空语句

    在 C 中 我可以这样写 using new MyDisposableClass MethodA 分号会导致显示编译器警告 其中指出可能存在错误的空语句 我没有运行上面的代码 但是该方法不会仍然被调用吗 这种类型的编码约定有什么用途 我在这
  • 重新分配结构体数组

    我正在尝试为从文件读取或向文件读取或由用户输入的结构数组 实际上是 2 个结构体中的每一个 但为了简单起见 此处包含 1 个结构体 动态重新分配内存 typedef Struct char surname 21 char firstname
  • 对用户定义函数内的语句进行分析

    我正在尝试使用 SQL Server Profiler 2005 来跟踪一些应用程序性能问题 所进行的调用之一是对表值用户定义函数的调用 该函数包装了一个将多个表连接在一起的选择 在 SQL Server Profiler 中 会记录对 U
  • 空栈异常

    这个EmptyStackException继续弹出 显然 我的堆栈中没有任何内容 只有用户输入的第一个元素 但是 我不确定代码哪里有缺陷 很多地方 但我只需要修复这个错误 import java util public class stac
  • android ViewPager xml 膨胀错误

    我正在学习如何实现水平滑动 并且在尝试启动我的应用程序时遇到以下错误ViewPager在它的布局中 03 25 17 12 13 166 E AndroidRuntime 19449 FATAL EXCEPTION main 03 25 1
  • 什么是“根引用”?

    引用自 在 C 中安全 在 C 中不安全 简单返回指针 引用 答案 3 埃里克 利珀特 Eric lippert 另请注意 并不是对 Person 对象的任何引用使其保持活动状态 引用必须是 root 的 您可以有两个相互引用但无法访问的
  • Makefile 致命错误:无法创建 obj/calc.o

    我正在尝试为大学项目的简单计算器制作一个生成文件 我需要完成它 我在网上搜索了教程 最终找到了这段代码 IDIR include CC gcc CFLAGS I IDIR ODIR obj LDIR lib SDIR src LIBS lm
  • Swift 3:UITableViewRowActionStyle()“缺少参数”错误消息

    当我滑动 UITableView 单元格时 将调用以下代码 func tableView tableView UITableView editActionsForRowAt indexPath IndexPath gt UITableVie
  • 在 blueimp/jquery-file-upload 上向 mysql 插入添加更多自定义变量

    我目前正在通过 mysql 在 blueimp jquery file upload 脚本内插入标题和描述 我用了this但是 我需要添加另一个变量 该变量是当前登录用户的session ID SESSION userid 我想将其插入到我
  • MVC3 - 只有第一行链接适用于 Jquery 模态对话框

    使用 MVC3 Razor Jquery Javascript 下面的代码循环并显示带有字段和链接的表结构 每行上的链接都会触发一个 Jquery 模态对话框 该对话框将部分视图页面显示为弹出窗口 但弹出对话框仅适用于第一行 第二行及其下方
  • 云函数-获取超过10MB的文件内容

    Google Cloud Functions 配额页面 https cloud google com functions quotas表示 HTTP 响应中 HTTP 函数发送的最大数据量为 10 MB 我在 Google 存储桶中有 10
  • 用于算术运算的 BFS

    用最少的运算将数字 m 转换为 n 允许的运算为减 1 和乘 2 例如 4 和 6 答案是 2 第一个操作 1 gt 4 1 3 第二次操作 gt 3 2 6 我对特定输入 src 26 dst 5 使用 BFS 方法 这需要很长时间 难道
  • 使用 Lua 评估数学表达式

    In my 上一个问题我一直在寻找一种在 C 语言中评估复杂数学表达式的方法 大多数建议都需要实现某种类型的解析器 However 一个答案 建议使用 Lua 来计算表达式 我对这种方法很感兴趣 但我对Lua一无所知 有 Lua 经验的人可
  • 将给定坐标处的饼图添加到 cartopy 投影

    我是数据可视化的初学者 对于 cartopy 更是如此 我知道对于大多数人来说我的问题是显而易见的 我正在尝试熟悉 cartopy 并且成功地绘制了文本和点 但我无法实现饼图 我只想在特定投影上绘制饼图 但我真的很困惑 尽管有 cartop
  • 使用 PyAudio 防止 ALSA 欠载

    我编写了一个小程序 它记录麦克风的声音并将其通过网络发送并在那里播放 我正在使用 PyAudio 来完成此任务 它工作得几乎很好 但在两台计算机上我都从 ALSA 收到错误 表明发生了欠载 我在谷歌上搜索了很多相关内容 现在我知道什么是欠载
  • 如何通过网络使用命名管道?

    我正在尝试通过命名管道创建网络连接 我正在按照它所说的那样做msdn 我用函数创建管道服务器端 CreateNamedPipe pipe myNamedPipe DUPLEX FILE FLAG OVERLAPPED 0 255 BUFFE
  • 等待其他期货提出的期货

    我正在使用 Lawndart 库访问浏览器数据 并希望收集一组查询的结果 这是我认为应该起作用的 numberOfRecordsPerSection callback var map new Map db sections keys for
  • 使用 LINQ 计算与前一项的差异

    我正在尝试使用 LINQ 为图表准备数据 我无法解决的问题是如何计算 与之前的差异 我期望的结果是 ID 1 日期 现在 DiffToPrev 0 ID 1 日期 现在 1 DiffToPrev 3 ID 1 日期 现在 2 DiffToP