最简单的分组

var conHistoryList = conHistoryData.GroupBy(g => g.personId);

就是conHistoryData是一个IQueryable<T>类型;

分组后组内排序

var conHistoryList = conHistoryData.GroupBy(g => g.personId).Select(g => g.OrderBy(c => c.addTime));

对数据分组之后在根据每一个分组内的某一个元素排序。

分组后排序返回第一个

 var conHistoryList = conHistoryData.GroupBy(g => g.personId).Select(g => g.OrderBy(c => c.addTime).FirstOrDefault()).ToList();

对数据分组之后在根据每一个分组内的某一个元素排序。排序之后在返回第一个元素,然后组成一个集合返回。这个实现的是根据分组取组内第一个元素然后重新返回一个元素列表。

使用组内元素

var dd = conHistoryData.GroupBy(g => g.personId);
//获取每个分组的键
foreach (var item in dd)
{
string GroupByKey = item.Key;
//获取每个分组的内容
foreach (var item2 in item)
{
ContractHistoryInfor historyInfor = item2;
}
}

多次分组组合

var childDetailListData = new List<ChildFactDetailInfor>();
var childDetailListG = childDetailList.GroupBy(b => b.materialCategory).Select(g => g.GroupBy(b => b.materialNum));

childDetailList是一个List<ChildFactDetailInfor>集合。通过先分组materialCategory字段,然后在在分组内根据materialNum字段再次分组。

使用多次分组的元素

var childDetailListData = new List<ChildFactDetailInfor>();
var childDetailListG = childDetailList.GroupBy(b => b.materialCategory).Select(g => g.GroupBy(b => b.materialNum));
foreach (var item in childDetailListG)
{
foreach (var item2 in item)
{
decimal? a = item2.Sum(x => x.materialNum);
decimal? c = item2.Sum(x => x.priceTotal);
foreach (var item3 in item2)
{
item3.materialNum = a;
item3.priceTotal = c;
childDetailListData.Add(item3);
}
}
}

和上面使用元素差不多就是遍历层数

补充记录一个linq左连接多表关联去除控数据示例:

     var data = (from a in childData
join bj in bjCostData
on a.id equals bj.childId
into bj
from bje in bj.DefaultIfEmpty()
join bjt in bjRefundData
on a.id equals bjt.childId
into bjt
from bjte in bjt.DefaultIfEmpty()
//学平险
join xpx in xpxCostData
on a.id equals xpx.childId
into xpx
from xpxe in xpx.DefaultIfEmpty()
join xpxt in xpxRefundData
on a.id equals xpxt.childId
into xpxt
from xpxte in xpxt.DefaultIfEmpty()
//餐费
join cf in cfCostData
on a.id equals cf.childId
into cf
from cfe in cf.DefaultIfEmpty()
join cft in cfRefundData
on a.id equals cft.childId
into cft
from cfte in cft.DefaultIfEmpty()
//自定义
join zdy in zdyCostData
on a.id equals zdy.childId
into zdy
from zdye in zdy.DefaultIfEmpty()
join zdyt in zdyRefundData
on a.id equals zdyt.childId
into zdyt
from zdyte in zdyt.DefaultIfEmpty()
//休园
join xy in xyCostData
on a.id equals xy.childId
into xy
from xye in xy.DefaultIfEmpty()
join xyt in xyRefundData
on a.id equals xyt.childId
into xyt
from xyte in xyt.DefaultIfEmpty()
//押金
join yj in yjCostData
on a.id equals yj.childId
into yj
from yje in yj.DefaultIfEmpty()
join yjt in yjRefundData
on a.id equals yjt.childId
into yjt
from yjte in yjt.DefaultIfEmpty()
select new H_ChildStatistics
{
id = a.id,
parkId = a.parkId,
parkName = a.parkName,
childName = a.childName,
childNameEng = a.childNameEng,
gradeNo = a.gradeNo,
classNo = a.classNo,
modifyTime = a.modifyTime,
bjfTotalReceive = bje == null ? : bje.payTotalMoney,
bjfTotalRefund = bjte == null ? : bjte.payTotalMoney,
xpxTotalReceive = xpxe == null ? : xpxe.payTotalMoney,
xpxTotalRefund = xpxte == null ? : xpxte.payTotalMoney,
cfTotalReceive = cfe == null ? : cfe.payTotalMoney,
cfTotalRefund = cfte == null ? : cfte.payTotalMoney,
xyglfTotalReceive = xye == null ? : xye.payTotalMoney,
xyglfTotalRefund = xyte == null ? : xyte.payTotalMoney,
yjTotalReceive = yje == null ? : yje.payTotalMoney,
yjTotalRefund = yjte == null ? : yjte.payTotalMoney,
zdyTotalReceive = zdye == null ? : zdye.payTotalMoney,
zdyTotalRefund = zdyte == null ? : zdyte.payTotalMoney,
childTotalReceive = ((bje == null ? : bje.payTotalMoney) + (xpxe == null ? : xpxe.payTotalMoney) + (cfe == null ? : cfe.payTotalMoney) + (xye == null ? : xye.payTotalMoney) + (yje == null ? : yje.payTotalMoney) + (zdye == null ? : zdye.payTotalMoney)),
childTotalRefund = ((bjte == null ? : bjte.payTotalMoney) + (xpxte == null ? : xpxte.payTotalMoney) + (cfte == null ? : cfte.payTotalMoney) + (xyte == null ? : xyte.payTotalMoney) + (yjte == null ? : yjte.payTotalMoney) + (zdyte == null ? : zdyte.payTotalMoney)),
});

GroupBy分组的运用和linq左连接的更多相关文章

  1. C# linq左连接与分组

    1.左连接使用DefaultIfEmpty(): 2.分组时候判断newper.FirstOrDefault() == null ? null: newper.ToList()这个经常出错误,如果不判 ...

  2. Linq Left Join;linq左连接 (转载)

    来源 https://www.cnblogs.com/xinjian/archive/2010/11/17/1879959.html 准备一些测试数据,如下: use Test Create tabl ...

  3. linq 左连接后实现与主表一对一关系数据

    var query1 = from r in _residentRepository.GetAll() join i in _inLogRepository.GetAll() on r.Id equa ...

  4. EF to linq 左连接

    如果连接的数据不存在用 null 表示,则可以左连接查询,但是如果数据类型为 int 则会出错. var ng = (from g in _db.NET_NEWS_GROUP join z in _d ...

  5. Linq 左连接 left join

    Suppose you have a tblRoom and tblUserInfo. Now, you need to select all the rooms regardless of whet ...

  6. linq左连接

    Table1和Table2连接,把Table1的全列出来 var tempData = from a in table1 join b in table2 on a.Id equals b.aId i ...

  7. linq 左连接

    var list = (from item in vall join item3 in v1 on new { item.FItemID, item.FAuxPropID } equals new { ...

  8. linq左连接查询加上into后怎么查询右表是否为空

    //判断右表是否为空并为映射表进行赋值标志var query=from q in product join m in favProduct on q.Name equals m.Name into t ...

  9. linq 左连接实现两个集合的合并

    //第一个集合为所有的数据 var specilist = new List<Me.SpecificationsInfo>(); var resultall = (from a in db ...

随机推荐

  1. httphandler httpmodule一些个人理解

    asp.net 对于http请求需要走一个管道就行一层一层的过滤:比如身份验证,根据请求的资源不同分发给具体哪个dll来处理 这些管道中就是httpmodule.所以我们自己写的httpmodule实 ...

  2. modelsin联合仿真

    1-选择eda仿真工具  tool->options->eda tool options 2-assignments->settings->eda tool settings- ...

  3. Dev修改gridview 背景色

    private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventA ...

  4. Codeforces gym102152 K.Subarrays OR

    传送:http://codeforces.com/gym/102152/problem/K 题意:给定$n(n\le10^5)$个数$a_i(a_i\le10^9)$,对于任一个子数组中的数进行或操作 ...

  5. consul初步学习

    简介 consul是一个服务发现框架 类似的还有zookeeper,eureka,etcd等 作用 服务发现(service discovery) 健康检查(health checking) 配置存储 ...

  6. Redis 分布式锁进化史(解读 + 缺陷分析)

    Redis分布式锁进化史 近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布 ...

  7. ASP.NET Core 2.2中的Endpoint路由

    Endpoint路由 在ASP.NET Core 2.2中,新增了一种路由,叫做Endpoint(终结点)路由.本文将以往的路由系统称为传统路由. 本文通过源码的方式介绍传统路由和Endpoint路由 ...

  8. 机器学习基石笔记:12 Nonlinear Transformation

    一.二次假设 实际上线性假设的模型复杂度是受到限制的, 需要高次假设打破这个限制. 假设数据不是线性可分的,但是可以被一个圆心在原点的圆分开, 需要我们重新设计基于该圆的PLA等算法吗? 不用, 只需 ...

  9. ASP.NET Web API实现微信公众平台开发(三)自定义菜单

    承接之前的流程,在完成服务器绑定和获取access_token之后,本文主要讲述如何实现微信自定义菜单. 官方示例效果 开始之前 .自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. ...

  10. Python——collections模块

    collections模块 collections模块在内置数据类型(dict.list.set.tuple)的基础上,还提供了几个额外的数据类型:ChainMap.Counter.deque.def ...