LINQ分组时如何进行组内排序?另外如何仅返回每组中满足条件的行(如Id最大的)?...

1、定义演示数据类型:

 
  
public class TestData
{
public int GrpId { get ; private set ; }
public int Id { get ; set ; }
public int IdMod5 { get ; private set ; }
public string Name { get ; set ; }

public TestData( int id, string name)
{
Random _random
= new Random();
this .Id = id;
this .Name = name;
this .GrpId = this .Id % 3 ;
this .IdMod5 = this .Id % 6 ;
}
}

 

假定已初始化了如图的数据:
2010070916491261.jpg

2、演示分组时组内排序和组外排序方法:

 
  
Console.WriteLine( " \r\n演示组内按Name降序和组外按Key.RID升序: " );
var numberGroups
= from n in testdatas
orderby n.Name descending
group n by
new { n.IdMod5, RID = n.GrpId } into g
orderby g.Key.RID
select
new { Remainder = g.Key, Numbers = g };
foreach (var g in numberGroups)
{
Console.WriteLine(
" Numbers with a remainder of {0} when divided by 5: " , g.Remainder);
foreach (var n in g.Numbers)
{
Console.WriteLine(
" Id:{0} Name:{1} RID:{2} IdMod5:{3} " , n.Id, n.Name, n.GrpId, n.IdMod5);
}
}

 

运行结果见下图:
2010070916535924.jpg

3、演示先分组,然后每组里面仅取满足条件的行组:

 
  
Console.WriteLine( " \r\n演示先分组,然后每组里面仅取Id最大的行组: " );
var lets
= from a in testdatas
group a by a.GrpId into grp
let maxId
= grp.Max(a => a.Id)
from row
in grp
where row.Id == maxId
select row;

foreach (var g in lets)
{
Console.WriteLine(
" Id:{0} Name:{1} RID:{2} IdMod5:{3} " , g.Id, g.Name, g.GrpId, g.IdMod5);
}

 

运行结果如下图:
2010070916553058.jpg

 

 演示代码

转载于:https://www.cnblogs.com/chriskwok/archive/2010/07/09/1774494.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值