使用 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 计算与前一项的差异 的相关文章

  • EF 5.0 中的链接 OR 条件

    我将以此为序言 我正在积极寻找这个问题的解决方案 但我想 如果堆栈上有人已经解决了这个问题 我可能会缩短一些研究和开发时间 我在网上没有找到任何东西 所以这里是 我们正在构建的应用程序框架中有一个案例 我们需要能够接受一组谓词 List
  • 关于 FirstOrDefault 或 SingleOrDefault

    FirstOrDefault 或 SingleOrDefault 将返回什么类型的数据 假设我的查询返回 3 条记录 例如 empid ename salary 1 joy 1500 2 rob 4500 3 jen 6500 所以如果我们
  • 在 List ForEach() 中设置多个属性?

    给定一个类 class foo public string a public int b 0 然后是它们的通用列表 var list new List
  • 如何在 VS 2013 的立即窗口中执行 LINQ 和/或 foreach?

    在调试过程中探测当前状态时 立即窗口是非常有用的工具 我了解到 通过使用问号 人们可以在那里做更多的事情 如图所示在这篇文章中 https stackoverflow com questions 32934635 execute metho
  • 按年份进行透视并获取 2020 年以来的金额总和

    我有这样的数据 我想按年份旋转并仅显示 2020 年以来的总数 我该如何实现这一目标 您可以使用以下方法实现此目的PIVOT https spark apache org docs 3 2 1 api python reference ap
  • 如何在 C# 中从这个分层父子结构中查找任何项目

    如何从列表中查找任何项目 因为它是动态的 它可能位于列表的任何位置的父项或子项中 并且当子项计数为0时需要停止查找 下面是列表的模型和分层父子结构示例 例子 父级 gt 子级 gt 子级 gt 子级或父级 gt 子级 gt 子级 gt 子级
  • ASP.NET Core 中 AsNoTracking 的模拟或更好的解决方法

    您如何模拟 AsNoTracking 或者是否有更好的解决方法来解决此问题 Example public class MyContext MyContextBase Constructor public MyContext DbContex
  • MongoDB 中两个集合之间的 Diff()

    我做过研究 如果这是一个重复的问题 我很抱歉 但其他问题的解决方案并不适合我 因此 我提出了一个新问题 使用 Javascript 比较两个集合的最佳方法是什么 我有数千个这样的 Mongo 文档格式的标头 url google com h
  • 内存耗尽:对于使用 diff 的大文件

    我正在尝试使用两个大文件夹 7GB 创建补丁 我是这样做的 diff Naurbw other folder gt file patch 但也许由于文件大小的原因 补丁没有被创建并给出错误 diff memory exhausted 我尝试
  • SQL Server PIVOT 函数

    我有一个检索所有代理及其模块的查询 结果集将每个模块返回 1 行 SELECT am agentID AS agentid pa agentDisplayName agentdisplayname m ModuleName ModuleNa
  • 使用 LINQ 获取两个数组中不同和共同的项目

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 例如 我有
  • 从 .NET 文本中提取关键字

    我需要计算每个关键字在字符串中重复出现的次数 并按最高次数排序 NET 代码中用于此目的的最快算法是什么 编辑 下面的代码将唯一标记与计数分组 string target src Split new char var results tar
  • 是否可以使用“最小”算法进行交互式添加?

    当从快照计算变更集时 Git 并不总是正确选择块边界 git diff has a diff algorithm允许在这方面进行一些调整的选项 git diff minimal有时会给出比git diff alone 有没有办法获得相同的优
  • linq 中使用字符串数组 c# 的 'orderby'

    假设我有一个这样的方法定义 public CustomerOrderData GetCustomerOrderData string CustomerIDs var query from a in db Customer join b in
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 优化 LINQ 查询 - 如何缩短执行时间?

    我想知道是否有一个好的方法来优化我的 LINQ 查询 我正在使用类似于以下内容的 LINQ 查询从数据库检索数据 PKs is a list of integers var import context table Where x gt P
  • Linq 连接两个值

    假设我有一个列表 City State 它最初来自数据库 我有LocationID 但现在我将它加载到内存中 假设我还有一张快餐店表 其中记录了城市和州 我需要获取与城市和州相匹配的机构列表 注意 我尝试描述一个简化的场景 我的业务领域完全
  • 在 IEnumerable 中查找相同的集合

    有一项任务要弄清楚如何更新表 DataTable 连接到一个database没有UPDATE陈述 我想出的例子是从邮箱中读取警报 该表将写入 Alerts 如果邮件正文包含单词 SUCCESS gt Alert 变为绿色 如果 FAIL g
  • 在 LINQ-SQL 中,将 DataContext 包装为一个 using 语句 - 优点 缺点

    有人可以从性能 内存使用 编码的简易性 正确的做法等因素方面阐述将 DataContext 包装在 using 语句中或不在 LINQ SQL 中之间的优缺点吗 Update 在一个特定的应用程序中 我发现 如果没有将 DataContex
  • 如果数组为空,LINQ 返回 null

    public class Stuff public int x other stuff 我有一个IEnumerable

随机推荐

  • 装饰一个方法

    在我的 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