2013-05-30 57 views
0

我有一個像下面得到明顯與LINQ查詢分鐘和最大

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 

我需要得到創紀錄的最低入學時間爲每年的名稱和最大EXITTIME爲eachname使用LINQ查詢

這樣的表我需要的結果集類似下面

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

回答

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

這裏是展示如何做到這一點上IEnumerab一個LinqPad查詢樂當Entrytime和EXITTIME是字符串,而不是一個日期時間:

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(); 
+0

對不起,我不應該假定Entrytime和EXITTIME是DateTime是否。我已經更新了答案。 –

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