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查询,最后还是要转 ...
随机推荐
- Mysql索引优化1
Btree索引和哈希索引(索引是一种数据结构,提高查询,排序,分组速度) Btree索引的数据结构是平衡二叉树,时间复杂度为lgN 哈希索引的数据结构是一个Hash函数,时间复杂度为O(1),数据输入 ...
- <富爸爸,穷爸爸> 书中的好句子
成为 做 拥有 资产是能把钱放进你口袋里的东西:负债是把钱从你的口袋里取走的东西. 语言会变成血肉,留在我们的身体里 要想做一个成功的投资者,你必须在情感上对赚钱和赔钱漠不关心,赚钱和赔钱只是游戏的一 ...
- 洛谷P2534 [AHOI2012]铁盘整理
P2534 [AHOI2012]铁盘整理 题目描述 输入输出格式 输入格式: 共两行.第一行为铁盘个数N(1<=N<=50),第二行为N个不同的正整数,分别为从上到下的铁盘的半径R.(1& ...
- 玩转Android---组件篇---Intent(意图)
Intent的中文意思是“意图,目的”的意思,可以理解为不同组件之间通信的“媒介”或者“信使”. 目标组件一般要通过Intent来声明自己的条件,一般通过组件中的<intent-filter&g ...
- Docker从入门到实战(二)
Docker从入门到实战(二) 一:什么是docker Docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到主流的Linux.MacOS.Windo ...
- 约瑟夫问题(vector的使用)
题目大意:有n个人围坐在圆桌周围,每个人都有一个固定的编号. 从第s(<=n)个人开始报数(按照顺时针方向,从1开始),报到m的人出列,接着再从出列着的 下一个人开始报数(依然从1开始),报到m ...
- Storm概念学习系列之Stream消息流 和 Stream Grouping 消息流组
不多说,直接上干货! Stream消息流是Storm中最关键的抽象,是一个没有边界的Tuple序列. Stream Grouping 消息流组是用来定义一个流如何分配到Tuple到Bolt. Stre ...
- C#获得字符串首字符字母(大写)
/// <summary> /// 获得字符串首字符字母(大写): /// </summary> /// <param name="cnChar"&g ...
- [Freemarker] Getting Start
Freemarker是一个模板引擎,在.NET中有类似的T4模板,FreeMarker对ASP.NET MVC也很友好,链接地址,引用官方的一幅图 模板+数据=视图 Following are the ...
- String在方法中的传递方式(调用外部方法给String变量赋值时,未得到预期结果)
示例: public class StringTraining { public static void changeStr(String str){ str = "137878" ...