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 b on 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),
}
如果需要映射到一个已有的实体,可以进行如下写法:
var classInfoSql = getBasicDataByOrderSql.ToList().Select(s => new ClassInfo
{
FileSize = s.FileSize,
OrganizationID = s.OrganizationID
});
其中
getBasicDataByOrderSql
就是上面分组后的linq语句
这其中涉及到了多表连接,以及使用聚合函数对列进行统计的语法,希望对大家有帮助
EF写统计的更多相关文章
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- EF写in
qualityStatisticsInfoSql.Where(t => successStateArray.Contains(t.UploadReportFlag)); 如果写成 quality ...
- EF写INNER JOIN 链接
面对多表的查询,一般都是多表连接后下面再写条件,但是有一种写法可以提升一下EF生成的语句的效率 首先先去查询每一个表,把每一个表对应的条件附加上去,注意:过滤数据最多的条件放在首先位置 var lt ...
- EF写distinct
在日常开发中常常是这么写的 var logErrorRequest = from l in _logErrorRepository.Table select new { WrongTime = l.W ...
- EF查询百万级数据的性能测试--多表连接复杂查询
相关文章:EF查询百万级数据的性能测试--单表查询 一.起因 上次做的是EF百万级数据的单表查询,总结了一下,在200w以下的数据量的情况(Sql Server 2012),EF是可以使用,但是由于 ...
- 万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家
在EF Core 5中,有很多方式可以窥察工作流程中发生的事情,并与该信息进行交互.这些功能点包括日志记录,拦截,事件处理程序和一些超酷的最新出现的调试功能.EF团队甚至从Entity Framewo ...
- SQL Server 统计信息更新时采样百分比对数据预估准确性的影响
为什么要写统计信息 最近看到园子里有人写统计信息,楼主也来凑热闹. 话说经常做数据库的,尤其是做开发的或者优化的,统计信息造成的性能问题应该说是司空见惯. 当然解决办法也并非一成不变,“一招鲜吃遍天” ...
- C#EF中,使用类似于SQL中的% 模糊查询
最近在做项目的时候需要使用到模糊查询,但是后台使用EF写的 而不是ADO或者是Dapper,如果是这样的话,我们就可以使用Sql语句直接进行模糊查询 现在我们需要在LINQ中使用类似于模糊查询 在EF ...
- EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET
十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转 ...
随机推荐
- 商派OMS增加PMC跟生产中心角色权限思路
一.目标:根据现有的商派OMS框架逻辑二开 PMC中(外协单位.生产中心)角色权限(如:下图的仓库角色,根据[接单元.发货员.仓库管理员],选择一或多的版权仓库,同理,如外协单位根据[**.** .* ...
- [Xcode 实际操作]五、使用表格-(5)设置UITableView的单元格背景颜色
目录:[Swift]Xcode实际操作 本文将演示单元格背景颜色的设置 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添加两个协 ...
- [Xcode 实际操作]四、常用控件-(2)UIButton图片按钮的使用
目录:[Swift]Xcode实际操作 本文将演示图片按钮的使用 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class ViewCo ...
- App裂变活动多种玩法解析
移动互联网时代,流量为王.在App获取流量的过程中,有资金的砸广告,没资金的铺渠道,但是不管你有钱没钱,社交平台都是必须重点争夺的流量阵地. 毕竟,截至2018年底,微信及WeChat的合并月活跃账户 ...
- dorado开发模式下实现动态查询
使用dorado开发模式,我们可以实现以下开发技巧 开发技巧1.实现动态查询功能: 1. 查询按钮的onClick事件中写入: datasetEmployee.parameters().setValu ...
- AX 2012 窗体增加分隔线
在AX中将窗体控件分区一般通过group来实现,但是类似salesTable的可以调整大小的分区其实也是用group控件再加一些方法实现的. 1, 留意splitGroup属性: Autodeclar ...
- [USACO1.4]等差数列 Arithmetic Progressions
题目描述 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双 ...
- Codeforces 1161B(判断旋转对称)
要点 外层暴力枚举转的"角度",会发现肯定是n的约数 对于m条线段想判定当前的"角度"是否ok,每个线段只要管它自己的下一个即可,不必画个圈遍历一遍 之后将本来 ...
- P2746 [USACO5.3]校园网Network of Schools
传送门 把所有学校的关系构成一个图,显然一个强联通分量的所有学校只要有一个有新软件,其他学校也都会有 考虑缩点,发现入度为 0 的块一定要给,因为没有其他人给它 入度不为 0 的块一定有其他人给,我们 ...
- mysql主从复制之同步部分库表
这里以mariadb为例,和mysql一样的配置 系统:centos7 主服务器:192.168.0.1:3305(两台服务器都做过时间同步) 从服务器:192.168.0.2:3306(两台服务器都 ...