2011-05-04 39 views
0

是否有可能这个SQL转换为LINQ?将SQL转换为Linq - 如何?

SqlCommand cmd = new SqlCommand(@" 
WITH new AS (
    SELECT [UserSessionSequenceID], 
      [SessionGuid], 
      SiteID, 
      IP, 
      UrlTitle, 
      Url, 
      Referer, 
      BrowserWidth, 
      BrowserHeight, 
      [Timestamp], 
      ROW_NUMBER() OVER (PARTITION BY [SessionGuid] 
           ORDER BY UserSessionSequenceID DESC) AS sort 
    FROM [tblSequence] 
    WHERE SiteID = @siteID 
     AND [Timestamp] > DATEADD(mi, [email protected], GETDATE())) 
    SELECT TOP(@resultCount) 
     n.* 
    FROM new n 
    WHERE n.sort = 1 
    AND NOT EXISTS (SELECT NULL 
        FROM tblSequence s 
        WHERE s.siteid = n.siteid 
         AND s.sessionguid = n.sessionguid 
         AND [TimeStamp] <= DATEADD(mi, [email protected], GETDATE())) 
ORDER BY n.usersessionsequenceid DESC 
      "); 
      cmd.Parameters.Add("@resultCount", SqlDbType.Int).Value = resultCount; 
      cmd.Parameters.Add("@minutes", SqlDbType.Int).Value = minutes; 
      cmd.Parameters.Add("@siteID", SqlDbType.Int).Value = siteID; 

我有一个类,其中包含从名为“SimpleSession”的SQL中选择的所有字段。预先感谢您的帮助。

+1

您尝试了什么以及您卡在哪里? – jeroenh 2011-05-05 12:09:02

回答

4

说实话,我宁愿创建此语句查看和使用LINQ2SQL是简单的观点......

+0

我现在有了我的数据inMemory,而且我不再查询数据库 - 所以我需要做其他事情。 LINQ :-) – 2011-05-04 14:56:38

1

事实上,很多时候不过是没有理由复杂的SQL转换为某种LINQ相当于(甚至在兼容的声明的情况下)。

LinqToSql需要运行的任何LINQ命令时动态创建SQL命令。 那么,为什么我们会想,如果开销我们已经知道这是最好的SQL查询来解决?

我们可以很容易地创建调用某些View或Stored Procedure的LINQ方法,并将其作为类型化对象返回。您的程序将继续全部面向对象,但不会产生不必要的开销。

+0

我现在有我的数据inMemory,我根本就没有查询数据库不再 - 所以我需要做些别的事情。 LINQ :-) – 2011-05-04 14:57:30

0

为第一查询u能在tblSequence.AsEnumerable使用此

选自SEQ() 其中seq.Field( “SITEID”)== SITEID & & seq.Field( “时间戳”)>日期时间。 Now.AddMinutes(分钟) 选择新 { seq.UserSessionSequenceID, seq.SessionGuid, seq.SiteID, seq.IP, seq.UrlTitle, seq.Url, seq.Referer, seq.BrowserWidth, seq.BrowserHeight, seq.Timestamp };

对于row_number请参考此How To Project a Line Number Into Linq Query Results