EF写统计

EF的特性是,你from的第一个表为主表,接下来的所有表以左联或者内联或者交叉连接的方式去显示,不会出现右联,

在编写的时候,可以先确定个数据源,然后对这个数据源进行数据的统计,

例如SQL:

-- Region Parameters
DECLARE @p0 VarChar(1000) = ‘ExamImage‘
DECLARE @p1 VarChar(1000) = ‘‘
DECLARE @p2 Float = 1024
DECLARE @p3 Float = 1024
-- EndRegion
SELECT SUM(((CONVERT(Float,[t6].[value])) / @p2) / @p3) AS [FileSize], MAX([t6].[value2]) AS [UploadTime], [t6].[ResultDate]
FROM (
    SELECT [t3].[FileSize] AS [value], [t3].[UploadTime] AS [value2], [t0].[ResultDate], [t3].[TypeCode], [t0].[ServiceSectID], [t3].[DeleteFlag]
    FROM [a] AS [t0]
    LEFT OUTER JOIN [b] AS [t1] ON [t0].[VisitUID] = ([t1].[VisitUID])
    LEFT OUTER JOIN [c] AS [t2] ON ([t0].[PatientID] = [t2].[PatientID]) AND ([t0].[PatientMasterID] = [t2].[PatientMasterID])
    LEFT OUTER JOIN [d] AS [t3] ON (CONVERT(NVarChar(MAX),[t0].[ObservationUID])) = [t3].[BusinessID]
    LEFT OUTER JOIN [e] AS [t4] ON [t3].[FileUID] = [t4].[FileUID]
    LEFT OUTER JOIN [f] AS [t5] ON [t0].[OrganizationID] = [t5].[OrganizationID]
    ) AS [t6]
WHERE ([t6].[TypeCode] = @p0) AND ([t6].[ServiceSectID] <> @p1) AND (NOT ([t6].[DeleteFlag] = 1))
GROUP BY [t6].[ResultDate]

翻译成linq可以进行如下写法:

 from item in
                        (
                            from o in a
                            join v in bon o.VisitUID equals v.VisitUID into o_vJoin
                            from o_v in o_vJoin.DefaultIfEmpty()
                            join p in b on new { PatientID = o.PatientID, PatientMasterID = o.PatientMasterID } equals new { p.PatientID, p.PatientMasterID } into o_pJoin
                            from o_v_p in o_pJoin.DefaultIfEmpty()
                            join d in c on o.ObservationUID.ToString() equals d.BusinessID into o_dJoin
                            from o_v_p_d in o_dJoin.DefaultIfEmpty()
                            join dis in d on o_v_p_d.FileUID equals dis.FileUID into d_disJoin
                            from o_v_p_d_dis in d_disJoin.DefaultIfEmpty()
                            join om in e on o.OrganizationID equals om.OrganizationID into o_omJoin
                            from o_v_p_d_dis_om in o_omJoin.DefaultIfEmpty()
                            where o_v_p_d.TypeCode == "ExamImage" && o.ServiceSectID != "" && !o_v_p_d.DeleteFlag
                            select new
                            {
                                FileSize = o_v_p_d.FileSize,
                                UploadTime = o_v_p_d.UploadTime,
                                ResultDate = o.ResultDate
                            }
                        )
                    group item by new { item.ResultDate} into res
                    select new
                    {
                        FileSize = res.Sum(t => t.FileSize/1024d/1024d),
                        UploadTime = res.Max(t => t.UploadTime),
                        ResultDate = res.Select(t => t.ResultDate),
                    }

这其中涉及到了多表连接,以及使用聚合函数对列进行统计的语法,希望对大家有帮助

时间: 2024-10-10 09:41:54

EF写统计的相关文章

EF写distinct

在日常开发中常常是这么写的 var logErrorRequest = from l in _logErrorRepository.Table select new { WrongTime = l.WrongTime, InstitutionlGuid = l.InstitutionlGuid, DataSource = l.DataSource, AccessionNumber = l.AccessionNumber, ServiceSectID = l.ExamineType, Busine

ios 友盟统计

最近一直在忙 版本大改  所以想分享的东西没写到博客  今天就来分享下友盟统计的使用  1.下载sdk 2.方法封装 3.在合适的地方调用 我们在工程里建立一个基类控制器  BaseViewController   因为这样 我们把统计方法写进去 子类自然有统计功能   我没有专门针对一个点击事件写统计方法 不过基本道理一样 建立一个类 用来写统计方法  可以复制出去使用 #import <Foundation/Foundation.h> @interface UMUtils : NSObje

nvme 盘写放大

1. SSD 盘内部写操作的来源 1.1 用户请求 和其他存储介质一样,用户的写请求的数据及其相关meta 数据更新,是驱动SSD写操作的主要来源. 1.2 垃圾回收(GC) 基于SSD介质需要擦除之后才能写同一个位置的特性,对SSD逻辑地址的覆盖写会变成内部SSD物理地址的追加写,而对之前占用的物理地址空间就需要回收.这些空间通常是尽量凑成整个Block去回收,为此Block 内部的有效数据就需要搬迁,这就导致了额外的写. 1.3 磨损均衡 (wear leveling) 类似的限制是磨损均衡

2019.6.22刷题统计

今日写统计如此早的原因是:下午回老家,无法刷题. 今天完成了普及组的100道题,但还未进入USACO. 通过数:9 通过题目编号:1061/1072/1085/1090/1103/1109/1113/1125/1132 排名:暂居第一 本网站开始时间:2019/6/15 15:02:09 结束时间:2019/6/22 12:58:30 共计6天21小时56分21秒. 完成题目(见图片): 通过普及组100题的练习,我发现了自己普及组的知识点仍然掌握不全面,还需要继续复习. 另外,已经完成了入门+

c开源项目webbench学习

webbench是用c语言来实现的网站压力测试工具,可以并发产生3万个链接测试网站.在学习webbench时候最好先简单了解一下http协议,推荐小日本的一本书<图解http>,适合入门,图文并茂,先简单介绍下wenbench的使用方法,在ubuntu14.04上安装完后,执行: [email protected]:webbench-1.5# webbench  webbench [option]... URL   -f|--force               Don't wait for

item的常用类型下

1.磁盘IO的key vfs.fs.discovery 挂载的文件系统列表.用于低级发现. vfs.fs.inode [fs,<mode>] inode的数量或百分比.整数 - 数字 示例:vfs.fs.inode [/,pfree]旧命名:vfs.fs.inode.free [*],vfs.fs.inode.pfree [*],vfs.fs.inode.total [* fs - 文件系统 模式 - 一个(默认),free,used,pfree(free,percentage),pused(

[Programming Entity Framework] 第3章 查询实体数据模型(EDM)(一)

http://www.cnblogs.com/sansi/archive/2012/10/18/2729337.html Programming Entity Framework 第二版翻译索引 你可以使用各种方法查询实体数据模型.你选择有些方法是因为个人喜好,而其它的则是因为你可以利用特殊的效益.你很有可能已经听过LINQ to Entities和Entity SQL.你可以使用特殊的方法去查询,比如某些基于LINQ,而其它的基于EF的ObjectQuery类.这此查询方法中的每一个都会产生具

初学C#和MVC的一些心得,弯路,总结,还有教训(2)--关于Entity Framework

---恢复内容开始--- 看了一堆视频教程后,感觉基本了解的差不多了,可以动手.....因为最好的学习方法就是实践嘛.... 所以打算从网站做起,在WebForm和MVC之间选了MVC,因为感觉高大上...也比较灵活 于是买了两本书<ASP.NET MVC 4高级编程(第4版)>和<ASP.NET MVC 4 Web编程>,在群里有群友问,为什么要买两本...其实这是习惯啦...对于初学者来说,最先要了解的就是,这个东西大概是个什么东西....书的作者不同,介绍的侧重点也不同,买两

app服务器

http://heipark.iteye.com/blog/1847421http://heipark.iteye.com/blog/1847421http://wenku.baidu.com/view/f761cc1f55270722192ef769.html 服务框架:1.servlet2.netty协议:1.http 1.02.http 1.1db:mysql就可以了ORM框架:mybatis缓存:redis 技术:网络通信: tcp,http等:Web服务:servlet, cgi脚本,