0

我有一张如下表

Name Entrytime    Exittime
A    10:30 AM     6:30PM    
A    7:30 AM      5:30PM
B    10:30 AM     2:30PM
A    5:30 AM      3:30PM
B    11:30 AM     4:30PM
A    8:30 AM     7:30PM
C    9:30 AM      1:30PM
C    10:30 AM     9:30PM

我需要使用 linq 查询记录每个名称的最小进入时间和每个名称的最大退出时间

所以我需要如下结果集

Name Entrytime    Exittime
A    5:30 AM      7:30PM    
B    10:30 AM     4:30PM
C    9:30 AM      9:30PM
4

2 回答 2

3
Table
    .GroupBy(x=>x.Name)
    .Select(x=>new {Name=x.Key,
            Entrytime=x.Min(m=>m.Entrytime),
            Exittime=x.Max(m=>m.Exittime)})

这是一个 LinqPad 查询,展示了当 Entrytime 和 Exittime 是字符串而不是日期时间时如何在 IEnumerable 上执行此操作:

var list= new[]{
new {Name="A",Entrytime="10:30 AM",Exittime="6:30PM"},
new {Name="A",Entrytime="7:30 AM",Exittime="5:30PM"},
new {Name="B",Entrytime="10:30 AM",Exittime="2:30PM"},
new {Name="A",Entrytime="5:30 AM",Exittime="3:30PM"},
new {Name="B",Entrytime="11:30 AM",Exittime="4:30PM"},
new {Name="A",Entrytime="8:30 AM",Exittime="7:30PM"},
new {Name="C",Entrytime="9:30 AM",Exittime="1:30PM"},
new {Name="C",Entrytime="10:30 AM",Exittime="9:30PM"}};

var result=list.GroupBy(x=>x.Name)
    .Select(x=>new {Name=x.Key,
            Entrytime=x.Min(m=>DateTime.Parse(m.Entrytime)).ToString("h:mm tt"),
            Exittime=x.Max(m=>DateTime.Parse(m.Exittime)).ToString("h:mm tt")});

result.Dump();  
于 2013-05-30T02:02:42.813 回答
0
from t in table
group t by t.name into tgroup
select new 
{ 
    name = tgroup.Key, 
    entrytime = tgroup.Min(x => x.entrytime), 
    exittime = tgroup.Max(x => x.exittime)
}
于 2013-05-30T02:06:31.107 回答