最简单的分组

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. Git使用方法(精心整理,绝对够用)转载

    Git使用方法(精心整理,绝对够用)   一.git客户端(本地仓库)的一些操作 1.设置账户(需要和github账户设置一致) git config --global user.name xxx g ...

  2. hive 语法 case when 语法

    ' then '精选' else null end as sale_type 注意: end不能少

  3. linux、centos下安装配置vim

    ---恢复内容开始--- 1.一般情况下安装上centos后,会有vi,没有vim(以后可能会有吧) 如果不确定自己有没有vim,使用命令 rpm -qa|grep vim 查看,如果有的话,会显示三 ...

  4. utf-8转gb2312

    近日在对一个json串进行转码时,显示中文乱码,原因是json串编码方式为utf-8,而我程序在windows上采用的是多字节编码方式,即采用gb2312编码.这里就存在一个utf-8到gb2312的 ...

  5. Fetch的使用及兼容ie的处理

    Fetch 作为一个与时俱进的前端,Fetch当然应该有所了解和涉猎.如果你没有听说过Fetch,那么ajax应该不陌生吧.Fetch相当于是一个新版本的Ajax,虽然现在我们常常使用的仍是ajax, ...

  6. 解决eclipse中启动服务内存溢出问题

    在eclipse中双击tomcat进入参数配置页面,点击Open Launch configuration---Arguments,在VM Arguments的末尾加 -Xms1024M -Xmx20 ...

  7. Shell-9--条件测试

  8. JAVA学习路线——匹马行天下

  9. Docker - 配置DaoCloud的Docker加速器

    由于众所周知的原因,从Docker Hub难以高效地下载镜像. 除了使用VPN或代理之外,最为有效的方式就是使用Docker国内镜像. DaoCloud是首个提供国内免费Docker Hub镜像的团体 ...

  10. onload事件

    onload事件:页面加载(文本和图片)完毕的时候, onload的作用: JS加载时和html是同步加载的,如果使用元素在定义元素之前易报错: <!DOCTYPE html> <h ...