LINQ Lambda 如何按时间从小到大排序,但是如果姓名相同的话把后面的记录跟在第一条记录后面(也是按时间先后) 谢谢

javamy006 2013-03-05 04:10:35

1 12:01 小王
2 12:06 小李
3 12:03 小花
4 12:08 小王
5 12:05 小李
6 12:07 小王

------------------------------------------
结果
1 12:01 小王
6 12:07 小王
4 12:08 小王
3 12:03 小花
5 12:05 小李
2 12:06 小李

Linq Lambda要怎么来写
谢谢
...全文
719 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxingmin 2013-03-05
  • 打赏
  • 举报
回复
哦,没看到8楼的结果,呵呵,不好意思
q107770540 2013-03-05
  • 打赏
  • 举报
回复
囧~9 楼只是反面教材。。。
tiangong789 2013-03-05
  • 打赏
  • 举报
回复
实践无敌啊,在下佩服
gxingmin 2013-03-05
  • 打赏
  • 举报
回复
引用 9 楼 q107770540 的回复:
注意和.OrderBy().ThenBy()的区别: C# code?1list=list.OrderBy(l=>l.time).ThenBy(l=>l.Name.GetHashCode()).ToList();结果为: Plain Text code?1234561 12:01 小王3 12:03 小花5 12:05 小李……
楼主要把同一个人放在一起
gxingmin 2013-03-05
  • 打赏
  • 举报
回复
用Lambda表达式也可以
var res = dtUsers.Join(groups, x => x.Name, y => y.Name, 
                                   (x, y) => new { Name = x.Name, Time = x.Time, minTime = y.minTime }).OrderBy(x => x.minTime).ThenBy(x => x.Time).ToArray();
q107770540 2013-03-05
  • 打赏
  • 举报
回复
注意和.OrderBy().ThenBy()的区别:
list=list.OrderBy(l=>l.time).ThenBy(l=>l.Name.GetHashCode()).ToList();
结果为:
1	12:01	小王
3	12:03	小花
5	12:05	小李
2	12:06	小李
6	12:07	小王
4	12:08	小王
q107770540 2013-03-05
  • 打赏
  • 举报
回复
结果:
1	12:01	小王
6	12:07	小王
4	12:08	小王
3	12:03	小花
5	12:05	小李
2	12:06	小李
q107770540 2013-03-05
  • 打赏
  • 举报
回复
void Main()
{
	var list=new List<myClass>
	{
	 new myClass{ID=1, time=DateTime.ParseExact("12:01","HH:mm",null), Name="小王"},
	 new myClass{ID=2, time=DateTime.ParseExact("12:06","HH:mm",null), Name="小李"},
	 new myClass{ID=3, time=DateTime.ParseExact("12:03","HH:mm",null), Name="小花"},
	 new myClass{ID=4, time=DateTime.ParseExact("12:08","HH:mm",null), Name="小王"},
	 new myClass{ID=5, time=DateTime.ParseExact("12:05","HH:mm",null), Name="小李"},
	 new myClass{ID=6, time=DateTime.ParseExact("12:07","HH:mm",null), Name="小王"},
	};
 
	list=list.OrderBy(l=>l.time).GroupBy(x=>x.Name).SelectMany(x=>x).ToList();
	
	list.ForEach(l=>Console.WriteLine("{0}\t{1}\t{2}",l.ID,l.time.ToString("HH:mm"),l.Name));
}
class myClass
{
  public int ID {get;set;}
  public DateTime time {get;set;}
  public string Name {get;set;}
}
gxingmin 2013-03-05
  • 打赏
  • 举报
回复
 //先分组
            var groups = from q in dtUsers
                         group q by q.Name into g
                         select new { Name = g.Key, minTime = g.Min(x => x.Time) };


            //再排序
            var res=from q in dtUsers
                    join g in groups on q.Name equals g.Name 
                    orderby g.minTime,q.Time
                    select q;
gxingmin 2013-03-05
  • 打赏
  • 举报
回复
先按姓名分组,取每人的最小时间,然后按每人最小时间排序 形成一个临时分组表 跟你原表jion, 按临时分组表的最小时间和原表的时间排序
sj490790083 2013-03-05
  • 打赏
  • 举报
回复
引用 2 楼 Chinajiyong 的回复:
var query= dbUsers.OrderBy(t => new { t.dttime }).ThenBy(t => new { t.Name });
++
  • 打赏
  • 举报
回复
OrderBy(t=>new{name=t.name,time=t.time})
EnForGrass 2013-03-05
  • 打赏
  • 举报
回复
var query= dbUsers.OrderBy(t => new { t.dttime }).ThenBy(t => new { t.Name });
bdmh 2013-03-05
  • 打赏
  • 举报
回复
linq不是有orderby吗,按时间和姓名排序

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧