日期:2014-05-17  浏览次数:21315 次

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

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要怎么来写
谢谢

------解决方案--------------------
linq不是有orderby吗,按时间和姓名排序
------解决方案--------------------
var query= dbUsers.OrderBy(t => new { t.dttime }).ThenBy(t => new { t.Name });
------解决方案--------------------
OrderBy(t=>new{name=t.name,time=t.time})
------解决方案--------------------
引用:
var query= dbUsers.OrderBy(t => new { t.dttime }).ThenBy(t => new { t.Name });

++
------解决方案--------------------
先按姓名分组,取每人的最小时间,然后按每人最小时间排序 形成一个临时分组表
跟你原表jion, 按临时分组表的最小时间和原表的时间排序
------解决方案--------------------
 //先分组
            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;

------解决方案--------------------
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="小李"},