读书人

LINQ Lambda 怎么按时间从小到大排序

发布时间: 2013-03-10 09:38:39 作者: rapoo

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楼的结果,呵呵,不好意思

读书人网 >C#

热点推荐