2016-03-01 156 views
1

目前我有SQL查詢像轉換一個SQL到LINQ查詢

select tt.userId, count(tt.userId) from (SELECT userId,COUNT(userId) as cou 
    FROM [dbo].[users] 

    where createdTime> DATEADD(wk,-1,GETDATE()) 

    group by userId,DATEPART(minute,createdTime)/5) tt group by tt.userId 

現在我已經在數據表中的數據,我需要轉換的查詢,以LINQ以上,並執行對數據表。我無法這樣做,任何人都可以幫助我。

這就是查詢的作用,它將用戶分成5分鐘的時間段,然後計算每個用戶的時隙數量。

注意:我無法使用Linqer創建Linq查詢,因爲該表不存在於數據庫中,它是一個動態創建的虛擬表。

+0

嘗試在線轉換器 – mohan111

+0

@ mohan111請你分享一下有用的。我安裝Linqer和Linqpad,但似乎並沒有得到它的工作 –

+0

http://stackoverflow.com/questions/296972/sql-to-linq-tool – mohan111

回答

2

位複雜的查詢,給我最好的工作。

var result = table.AsEnumerable().Where(u=> u.Field<DateTime>("createdTime") > DateTime.Now.AddDays(-7)) //subtract a week 
     .GroupBy(g=> new { userid = g.Field<string>("userId") , span = g.Field<DateTime>("createdTime").Minute }) 
     .Select(g=> new { userid = g.Key.userid, count = g.Count()}) 
     .GroupBy(g=> g.userid).Select(s=> new {userid = s.Key, count = s.Count()}); 

工作Demo

+0

感謝Hari,讓我檢查一下這 –

+0

這工作完美再次感謝 –

+0

有一件事span = g.Field (「createdTime」)。分鐘}實際上是跨度= g.Field (「createdTime」)。分鐘/ 5},分割數據5分鐘時間段 –

0

我會建議使用LINQPad4。這很容易做到,這將有助於您編寫LINQ查詢。 https://www.linqpad.net/

+0

我沒有數據庫中的表來使用linqpad/linqer創建查詢 –

1

這個SQL可以寫成這樣

SELECT 
    COUNT(U.UserId), 
    U.[createdTime] 
FROM USERS U WHERE createdTime> DATEADD(wk,-1,GETDATE()) 
GROUP BY U.UserId, 
     DATEPART(MONTH, U.[createdTime]), 
     DATEPART(DAY, U.[createdTime]), 
     DATEPART(HOUR, U.[createdTime]), 
     (DATEPART(MINUTE, U.[createdTime])/5) 

及其相應的LINQ的數據表將

var users = myDataTable.AsEnumerable() 
       .Select(r=> new { 
        UserId = r.Field<int>("UserId"), 
        CreatedTime = r.Field<DateTime>("createdTime") 
       }).ToList(); 
      var groupedUsersResult = from user in users where user.CreatedTime > user.CreatedTime.AddDays(-7) group user by 
            new {user.CreatedTime.Year,user.CreatedTime.Month,user.CreatedTime.Day,Minute=(user.CreatedTime.Minute/5),user.UserId} 
            into groupedUsers select groupedUsers; 

小提琴是here