全国排名的问题(linq 的连表查询 等同于sql的left join)
前言:要获得全国排名,(因为权限问题,显示的数据不是全国的数据,而是某个分区的数据,因此,不能获得数据后排序得到排名)
显示本部的员工积分并且获得在全国的排名。
我的思路:获得显示的员工信息集合1,获得全国的员工ID,积分和,排名的数据集合2,根据集合1的员工在集合2里直接将排名取出
1、获得显示的员工信息 list1(具体就不展示了)
2、获得全国的员工ID,积分和,排名的数据集合2
表1:员工表 表2:积分表
一个员工可以有多条积分记录,也可能没有数据
var nationalPaiming = (from u in DbContext.Users
join ir in (from i in DbContext.Integrals
where i.IsDeleted == false
group i by i.UserID into g
select new
{
UserID = g.Key,
TotalScore = g.Sum(e => e.IntegralValue) //求员工的积分总和
}) on u.UserID equals ir.UserID
into gc
from gci in gc.DefaultIfEmpty() //相当于sql的左连表 可以在给gc加where条件gc.where(e=>e.)
where (deptSystem == ? true : d.DeptSystem == deptSystem)&& (state == ? u.IsDeleted == false : u.IsDeleted == true) //表中可能没有员工的积分记录
select new
{
UserId = u.UserID,
totalScoure = gci==null?:gci.TotalScore,
}
).OrderByDescending(e=>e.totalScoure).ToList();
转化成viewModel (计算每个人员的排名)
List<UserRankingViewModel> list = new List<UserRankingViewModel>();
for (int i = ; i < nationalPaiming.Count; i++)
{
UserRankingViewModel model = new UserRankingViewModel();
model.UserID = nationalPaiming[i].UserId;
model.TotalIntergal = nationalPaiming[i].totalScoure;
if (i == ) //因为这里的循环的集合是按照总积分降序排列的,所以第一个排名一定是第一
{
model.Ranking = i + ;
}
else
{
// 判断这个员工的总分是否和上一个员工的总积分相同
if (nationalPaiming[i].totalScoure == nationalPaiming[i - ].totalScoure)
{
model.Ranking = list[i - ].Ranking; //相同则排名相同
}
else
{
model.Ranking = list[i - ].Ranking + ; //不同则是上一位员工的下一名
}
}
list.Add(model);
}
3、在返回页面时循环集合1实体转换
List<int> nationalUserIds = nationalList.Select(e => e.UserID).ToList();
int index = userIds.IndexOf(viewModel.UserId);
viewModel.NationalRanking = nationalList[index].Ranking;
注:仅个人思路及实现的笔记,不妥之处(或有更好的方法),请各位指正。
全国排名的问题(linq 的连表查询 等同于sql的left join)的更多相关文章
- 分析比较多表查询中的IN与JOIN
IN 是子查询的关键字,JOIN 是连接的关键字,项目开发中经常会使用到多表查询,而子查询与连接正是实现多表查询的重要途径.那两者是怎么运行的?IN与JOIN哪个更好?下面就来分析与比较. 现在有te ...
- 005医疗项目-模块一:用户的查找:1.用户表查询的sql语句
这是医疗项目的第一个模块:做一个用户的查询,可以根据用户的账号,用户的名称,单位的名称,用户的类型去查询.要求效果如下:
- ACTION 中 单表查询语句 SQL写法
JSP页面 <tr> <td class="STYLE1"> <div align="center"> // 单击事件 调用 ...
- Entity Framework Core的坑:Skip/Take放在Select之前造成Include的实体全表查询
今天将一个迁移至 ASP.NET Core 的项目放到一台 Linux 服务器上试运行.站点启动后,浏览器打开一个页面一直处于等待状态.接着奇怪的事情发生了,整个 Linux 服务器响应缓慢,ssh命 ...
- LINQ TO SQL 中的join(转帖)
http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西 ...
- 【T-SQL基础】01.单表查询-几道sql查询题
概述: 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- PHP处理多表查询时的SQL语句拆分与重新组装
在自己写框架时候会发现,多表查询组装SQL语句<?php $pre = "pre_"; $aid = "44"; $data = array(" ...
- sql多表查询(单表查询略过)
表library: 表borrow: 表reader: 1.等值连接:(常用) 原理:将多张表组合成一个逻辑大表,即字段相加记录相乘(笛卡尔积). 语法:select * from 表A,表B whe ...
随机推荐
- 手机上Uncaught ReferenceError: __WEBPACK_AMD_DEFINE_ARRAY__ is not defined的错误
问题: vue2.0和webpack2.X的写的项目在电脑的浏览器上打开正常,在手机浏览器中访问页面的时候不能正常显示,空白. 通过chrome的真机调试chrome://inspect/#devic ...
- PHP中的变量名,函数名,类名是区分大小写的吗
在PHP中,自定义的函数名,类名,以及内置的函数,关键字是不区分大小写的,比如: class,Class,CLASS,while,While,ECHO,echo,NULL,Null 都是一样的. 但是 ...
- Alpha发布——美工+文案展示博客
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2283 文案: 学海无涯苦作舟,深海的远帆扬起成长的新程. 我将一滴水滴注 ...
- Beta阶段第2周/共2周 Scrum立会报告+燃尽图 02
此作业要求参见:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2410] 版本控制地址 https://git.coding.net ...
- Python数据挖掘学习路程--起步
一.首先第一步我去了解了Python开发环境:Python(程序运行基础的解释器)+第三方类库(功能扩展)+编辑器(提高代码编辑效率) 编辑器有:Pycharm.Spyder.jupyter note ...
- n元一维向量向左循环移位i的几种算法
1.最简单的算法借助于一个n元的中间向量在n步时间内完成 时间复杂度:O(n) 空间复杂度O(n) void shift_easy(int arr[], int _arr[], int n, int ...
- 查看sqlserver数据库的编码格式
查询语句:SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage'): 查询结果: 936 简体中文GBK 950 ...
- mysql中约束
约束 什么叫做约束? 约束,就是要求数据需要满足什么条件的一种“规定”. 主要有如下几种约束: 主键约束:形式: primary key ( 字段名); 含义(作用):使该设定字段的值可以用于“唯一确 ...
- 第207天:HTTP协议头字段详解大全
本篇重点介绍一下HTTP常用的Header HTTP Header非常之多,很少有人能完全分清这些Header到底是干什么的.鉴于RFC文件规范艰深晦涩难懂,本文对协议规范中列出的HTTP Heade ...
- 第116天: Ajax运用artTemplate实现菜谱
Ajax运用artTemplate实现菜谱 一.获取接口数据 1.聚合数据API https://www.juhe.cn,在这上面找到菜谱大全数据接口文档 具体使用是这样的: key后面的数据是 ...