全国排名的问题(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 ...
随机推荐
- “Hello World!”团队第六周的第五次会议
今天是我们团队“Hello World!”团队第六周召开的第五次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 八.代码 一 ...
- 20162328蔡文琛 Java课程总结
20162328 2016-2017-2<程序设计与数据结构>课程总结 一.每周作业.结对编程博客的链接汇总 预备作业01 20162328:表达对专业的期许.浅谈师生关系.对未来学习任务 ...
- swift - tabBar图片设置的一些注意点
图片大小尺寸 刚刚开始接触的话,从美工那边拿来的图标大小一般都是偏大的,就像这样: 在此建议,tabBar的图标大小可以是32*32,个人感觉效果不错 图片的颜色问题 如上图所示,该图标的期望颜色(也 ...
- 转 使用Docker部署 spring-boot maven应用
转自:https://blog.csdn.net/u011699931/article/details/70226504/ 使用Docker部署 spring-boot maven应用 部署过程分为以 ...
- 201621123037 《Java程序设计》第7周学习总结
作业06-接口.内部类 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 答: 思维导图: 其他-笔记: 2. 书面作业 1. ArrayList代码分析 1.1 解释Arr ...
- vue-cli脚手架搭建
我们使用vue-cli来搭建整个项目,vue-cli就是一个脚手架,步骤很简单,输入几个命令之后就会生成整个项目,里面包括了webpack.ESLint.babel很多配置等等,省了很多事 Vue+ ...
- 分布式架构核心RPC原理
在应用的迭代演进过程中,随着系统访问量提高,业务复杂度提高,代码复杂度提高,应用逐渐从单体式架构向面向服务的分布式架构转变.RPC(Remote Procedure Call Protocol远程过程 ...
- jquery截取手机号中间4位数,然后变为*
$(function() { var phone = $('#phone').text(); var mphone = phone.substr(0, 3) + '****' + phone.subs ...
- 【.Net】在WinForm中选择本地文件
相信很多朋友在日常的编程中总会遇到各钟各样的问题,关于在WinForm中选择本地文件就是很多朋友们都认为很难的一个学习.net的难点, 在WebForm中提供了FileUpload控件来供我们选择本地 ...
- bzoj3961[WF2011]Chips Challenge
题意 给出一个n*n的网格,有些格子必须染成黑色,有些格子必须染成白色,其他格子可以染成黑色或者白色.要求最后第i行的黑格子数目等于第i列的黑格子数目,且某一行/列的格子数目不能超过格子总数的A/B. ...