首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

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

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="小李"},


 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;}
}


[解决办法]
用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();

[解决办法]
囧~9 楼只是反面教材。。。
[解决办法]
哦,没看到8楼的结果,呵呵,不好意思

热点排行