2010-06-25 63 views
1

我試圖把這種SQL集團By列值:在LINQ

SELECT IDNum, Max(Convert(varchar(20), (TimeOut - TimeIn), 108)) 
     FROM IO_Times Group by IDNum 
     order by Max(Convert(varchar(20), (TimeOut - TimeIn), 108)) desc"; 

進入LINQ在C#。以上返回與每個唯一IDNum(每個IDNum有多個TimeOut-TimeIn值)相對應的(TimeOut-TimeIn)的最大值的列表。

這是我現在想:

from IO_Time in db.IO_Times 
orderby SqlMethods.DateDiffMinute(IO_Time.TimeIn, IO_Time.TimeOut) descending 
group IO_Time by IO_Time.IDNum into list 
select new 
{ 
    ID = list.Key, 
    Time = list 

}); 

這將返回正確的順序正確的ID,但「清單」包含在數據庫條目中的一切(這是有道理的)。我也嘗試了IDNum和Time組,但是我得到了唯一的時間條目和多個ID返回。

我可以做一個foreach循環,並手動排序它,但我真的寧願不這樣做。

有什麼建議嗎?

回答

2
from IO_Time in db.IO_Times 
orderby SqlMethods.DateDiffMinute(IO_Time.TimeIn, IO_Time.TimeOut) descending 
group IO_Time by IO_Time.IDNum into list 
select new 
{ 
    ID = list.Key, 
    Time = list.Max(t => t.TimeOut - t.TimeIn) 
} 

而且因爲你想更頻繁地使用Lambda表達式:

var results = 
    dbo.IO_Times 
     .OrderByDescending(i => SqlMethods.DateDiffMinutes(i.TimeIn, i.TimeOut)) 
     .GroupBy(i => i.IDNum) 
     .Select(g => new 
      { 
       ID = g.Key, 
       Time = g.Max(t => t.TimeOut - t.TimeIn) 
      }); 
+0

完美!我應該更頻繁地使用lambda操作。 – 2010-06-25 17:35:33

+0

非常好。如果我想加入另一張名稱與ID一致的表,該怎麼辦?我只是簡單地加入並希望名稱能夠在intellisense中顯示,但它不起作用。 – 2010-06-25 17:57:36

1
select new 
{ 
    ID = list.Key, 
    Time = list.Max(i => <operation>) 

}); 

這就是你想要做的嗎?