LINQ如何返回上一个日期以及第一个和最后一个计数之间的差 [英] LINQ how to return last date and difference between first and last count

查看:44
本文介绍了LINQ如何返回上一个日期以及第一个和最后一个计数之间的差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含以下列和示例数据的表:

I have a table with the following column and sample data:

acteename   updated_at              count (count is not sorted in db)

dev-52      2/7/2020 5:56:43 PM     1
dev-52      2/7/2020 5:56:52 PM     2
dev-52      2/7/2020 5:57:00 PM     3
dev-52      2/7/2020 5:57:49 PM     4
dev-52      2/7/2020 5:59:19 PM     5
dev-52      2/7/2020 6:01:51 PM     6
dev-52      2/7/2020 6:06:21 PM     7
dev-52      2/7/2020 6:14:51 PM     8
dev-52      2/7/2020 6:31:23 PM     9
dev-52      2/7/2020 6:47:54 PM     10
dev-52      2/7/2020 7:04:26 PM     11
dev-52      2/7/2020 7:20:58 PM     12

我想返回按 updated_at 和最后 updated_at 排序的 first last 计数之间的差异其中 acteename 等于我从不同表中获得的某个名称

I want to return diff between first and last count sorted by updated_at and last updated_at where acteename is equal to some name that I get from different table

IQueryable<Events> list = _DBcontext.Events.GroupBy(p => p.ActeeName)
                            .Select(g => new
                            {
                                acteename = g.Key,
                                lastupdated = g.OrderByDescending(p => p.UpdatedAt).First(),
                                firstcount = g.OrderBy(p => p.UpdatedAt).First().Count,
                                lastcount = g.OrderByDescending(p => p.UpdatedAt).First().Count
                            })
                            .Select(x => new { x.acteename,x.lastupdated, diff = x.lastcount - x.firstcount })
                            .Where(a => a.acteename == item.AppName)
                            .ToList();

出现以下错误:

无法隐式转换类型'System.Collections.Generic.List<<<匿名类型:字符串acteename,TestApp.Models.Events最后更新,int diff>>''System.Linq.IQueryable< TestApp.Models.Events>'.一个明确的转换存在(您是否缺少演员表?)

Cannot implicitly convert type 'System.Collections.Generic.List<<anonymous type: string acteename, TestApp.Models.Events lastupdated, int diff>>' to 'System.Linq.IQueryable<TestApp.Models.Events>'. An explicit conversion exists (are you missing a cast?)

预期输出:

dev-52      2/7/2020 7:20:58 PM     11

对此不确定,LINDA查询是否正确,任何帮助都将是有用的:)

kinda stuck on this not sure if the LINQ query is correct or not, any help will be useful :)

更新:

我运行的确切查询:

var list = from p in _DBcontext.AppProcessCrashEvents
                                   where p.Actee == item.AppGuid
                                   group p by p.Actee
            into gList
                                   select new
                                   {
                                       acteenamex = gList.Key,
                                       lastUpdated_at = gList.OrderBy(x => x.UpdatedAt).Last().UpdatedAt,
                                       diff = gList.OrderBy(x => x.UpdatedAt).Last().CrashCount -
                                                             gList.OrderBy(x => x.UpdatedAt).First().CrashCount
                                   };

推荐答案

一个人可以在最开始就应用过滤器.将 group by into 一起使用,然后最终选择所需的内容.由于它创建了一个匿名对象,因此最好从'var`开始.

One can apply the filter in very beginning itself. Use group by with into and then finally select what you need. Since its creating a anonymous object hence it would be better to start with 'var`.

已编辑:获取内存中的数据,然后应用 group by ,以避免在与数据库端分组进行映射时出现任何问题.

Edited: Fetch the data in memory and then apply group by to avoid any problem in mapping with database side grouping.

var list =  (from p in _DBcontext.Events
            where p.acteename == item.AppName select p).ToList();

var fList = (from p in list 
            group p by p.acteename
            into gList
            select new
            {
               acteenamex = gList.Key,
               lastUpdated_at = gList.OrderBy(x => x.updated_at).Last().updated_at,
               diff = gList.OrderBy(x => x.updated_at).Last().count - 
                                      gList.OrderBy(x => x.updated_at).First().count
            }).ToList();

这篇关于LINQ如何返回上一个日期以及第一个和最后一个计数之间的差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆