全国排名的问题(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 ...
随机推荐
- scrum立会报告+燃尽图(第三周第四次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2286 项目地址:https://coding.net/u/wuyy694 ...
- 第一次c++团队合作作业期间第一篇随笔
分析了自己分到的任务,我的理解是这样的:首先要生成程序主框架,在主框架中进行地图的描绘.我应该是先进行地图的拼接,把建筑物和地面都拼接好.然后再在地图上显示出英雄和小兵.同时还要在主框架中分析了自己分 ...
- 团队Alpha冲刺(九)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- lintcode-107-单词切分
107-单词切分 给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词. 样例 给出 s = "lintcode" dict = [" ...
- Iterable,Iterator和forEach
Iterable Interface Iterable<T> 方法: Iterator<T> iterator() Returns an iterator over a set ...
- (双人项目)四则运算 组员:杨钰宁 闫浩楠 开发语言:Python。
需求分析:1.适用人群:小学生. 2.能进行“+,—,*,/” 的四则运算.难度可以随时修改. 3.提交试卷后可以显示所得分数并显示错题个数. 4.可以显示答对的题及其打错的题的序号. 代码如下: i ...
- 【BioCode】将多个蛋白质序列分成单个的txt文档
代码说明: fasta格式的蛋白质序列,一个txt里面有很多蛋白质序列,计算ss.pssm或disorder score时候都需要单条计算,需要分开. 分割前: 分割后: show you the c ...
- 使用JsonConfig中的setExcludes方法过滤不需要转换的属性
Hibernate的many-to-one双向关联中,查询many方时会将one方数据顺带着查询,同时one中会有List<Many>,然后又会去查Many中的数据... 周而复始,结果j ...
- web移动开发最佳实践之js篇
一.js概述 js即JavaScript,是被设计用来验证表单.检测浏览器.创建cookies.改进设计以及更多应用的网络脚本语言,它非常容易使用.在web应用中,它是主要的编程语言,主要用途是进行各 ...
- MYSQL-update与select结合使用
使用 inner join ) c ,," , iteration; 如上例子: 完成更新 picture.labels 字段 & picture.iteration自增 的两个 ...