2012-08-17 55 views
-5

我有這個下面的SQL查詢,我必須實現使用LINQ相同的,但我不能創建一個相同的LINQ語句。請提供一些幫助。實施最小和最大的功能與基和具有在LINQ

Declare @DateTime datetime 
set @DateTime = '06/20/2012';-- To get the yesterday/any day attendance record. 
With Cte 
as 
(
    Select EmployeeiD,(convert(varchar,(DATEDIFF(MINUTE,Min(DateAndTime),Max(DateAndTime))/60)) + ':' 
     + convert(varchar,(DATEDIFF(MINUTE,Min(DateAndTime),Max(DateAndTime))/60)))WorkedHoursAndMinutes, 
    Min(DateAndTime) As DateAndTime from EmployeeAttendance group by 
    EmployeeiD,convert(varchar,DateAndTime,101),convert(varchar,DateAndTime,101) having (
    (DATEDIFF(MINUTE,Min(DateAndTime),Max(DateAndTime))/60) >= 12 
     or (DATEDIFF(MINUTE,Min(DateAndTime),Max(DateAndTime))) = 0) 
) 
select * from Cte 
where convert(varchar,Cte.DateAndTime,103) = 
      (select convert(varchar,@DateTime,103)); 
+0

以上查詢是關於找出員工記錄工作時間超過12小時,每天或登錄和退出時間之間的差爲0。 – Abhishek 2012-08-17 09:29:28

回答

1

正如你只顯示你如何想實現的東西是有點難以準確地推斷出你想要什麼。但我認爲這是它:

employeeAttendances.Where(e => e.DateAndTime >= d1 && e.DateAndTime < d2) 
.GroupBy (e => e.EmployeeiD) 
.Select (g => new 
{ 
    g.Key, 
    Diff = EntityFunctions.DiffHours(g.Min(x => x.DateAndTime), 
            g.Max(x => x.DateAndTime)) 
}) 
.Where(a => a.Diff > 12 || a.Diff == 0) 

它計算的最小和最大時間某一天每個EmployeeID之間的差異。