8,497
社区成员
发帖
与我相关
我的任务
分享
var q=list.where(时间条件).
groupby(new {用户id,日期(yyyy-mm-dd)}).
select(new {uid=用户id,日期=日期,最早=list.firstordefault(用户id=id&&日期=日期,最晚=list.lastordefault(用户id=id&&日期=日期)});
伪代码 大致如上...自己整理下 应该是可以实现的public class User
{
public virtual int id { get; set; }
public virtual string name { get; set; }
public virtual DateTime cardTime { get; set; }
}
var q = users.GroupBy(d => new { d.name, d.cardTime.Date }).
Select(d => new
{
名字 = d.Key.name,
日期 = d.Key.Date.ToString("yyyy-MM-dd"),
最早 = users.FirstOrDefault(x => x.name == d.Key.name && x.cardTime.Date == d.Key.Date.Date).cardTime,
最晚 = users.LastOrDefault(x => x.name == d.Key.name && x.cardTime.Date == d.Key.Date.Date).cardTime
}).ToList();
q.ForEach(item => {
Console.WriteLine(item.ToJson());
});
得到
{"名字":"Jay","日期":"2017-04-26","最早":"2017-04-26T09:00:00","最晚":"2017-04-26T15:00:00"}
{"名字":"Jay","日期":"2017-04-27","最早":"2017-04-27T08:00:00","最晚":"2017-04-27T12:00:00"}
{"名字":"h12","日期":"2017-04-26","最早":"2017-04-26T09:00:00","最晚":"2017-04-26T23:00:00"}
{"名字":"h12","日期":"2017-04-27","最早":"2017-04-27T09:00:00","最晚":"2017-04-27T09:00:00"}
{"名字":"h12","日期":"2017-04-28","最早":"2017-04-28T09:00:00","最晚":"2017-04-28T11:00:00"}
{"名字":"h12","日期":"2017-04-29","最早":"2017-04-29T09:00:00","最晚":"2017-04-29T21:00:00"}
static List<User> list = new List<User>()
{
new User(){id=1,name="Jay",cardTime=DateTime.Parse("2017-04-26 9:00:00")},
new User(){id=1,name="Jay",cardTime=DateTime.Parse("2017-04-26 10:00:00")},
new User(){id=1,name="Jay",cardTime=DateTime.Parse("2017-04-26 15:00:00")},
new User(){id=1,name="Jay",cardTime=DateTime.Parse("2017-04-27 8:00:00")},
new User(){id=1,name="Jay",cardTime=DateTime.Parse("2017-04-27 9:00:00")},
new User(){id=1,name="Jay",cardTime=DateTime.Parse("2017-04-27 12:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-26 9:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-26 22:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-26 23:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-27 9:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-28 9:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-28 10:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-28 11:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-29 9:00:00")},
new User(){id=2,name="h12",cardTime=DateTime.Parse("2017-04-29 21:00:00")},
};
static void Main(string[] args)
{
//每人,每天最早最晚的记录
var o = list.GroupBy(x => new { x.id, x.cardTime.Date }).Select(g => new { g, count = g.Count() })
.SelectMany(t => t.g.Select((b, i) => new { b, i,t.count })).Where(x=>x.i==0 || x.i==(x.count-1));
foreach (var item in o)
{
Console.WriteLine("{0} {1} {2}", item.b.id, item.b.name, item.b.cardTime);
}
Console.ReadLine();
}