简体   繁体   English

将 SQL 转换为 Linq - 如何?

[英]Convert SQL to Linq - how to?

Is it possible to convert this SQL to 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, -@minutes, 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, -@minutes, 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;

I have a class containing all the fields selected from the SQL called " SimpleSession ".我有一个 class 包含从名为“ SimpleSession ”的 SQL 中选择的所有字段。 Thanks in advance for any help.提前感谢您的帮助。

To be honest, I would rather create a View for this statement and use that simple view in Linq2Sql...老实说,我宁愿为这个语句创建一个视图,并在 Linq2Sql 中使用那个简单的视图......

In fact, many times there isn't no reason to convert complex SQL to some LINQ equivalent (even in case of compatible statements).事实上,很多时候没有理由将复杂的 SQL 转换为 LINQ 等效项(即使在兼容语句的情况下)。

LinqToSql needs to dynamically create the SQL commands when running any LINQ command.当运行任何 LINQ 命令时,LinqToSql 需要动态创建 SQL 命令。 So, do why we would want to overhead if we already know which is the best SQL query to solve?那么,如果我们已经知道哪个是最好的 SQL 查询来解决,为什么还要开销呢?

We can easily create LINQ methods that call some View or Stored Procedure and returns it as typed objects .我们可以轻松地创建 LINQ 方法,这些方法调用一些视图或存储过程并将其作为类型对象返回 Your program will continue to be all fully object oriented but without unecessary overheads.您的程序将继续完全面向 object,但没有不必要的开销。

for first query u can use this对于第一个查询,您可以使用它

from seq in tblSequence.AsEnumerable() where seq.Field("SiteID") == siteID && seq.Field("Timestamp") > DateTime.Now.AddMinutes(minutes) select new { seq.UserSessionSequenceID, seq.SessionGuid, seq.SiteID, seq.IP, seq.UrlTitle, seq.Url, seq.Referer, seq.BrowserWidth, seq.BrowserHeight, seq.Timestamp };从 seq in tblSequence.AsEnumerable() where seq.Field("SiteID") == siteID && seq.Field("Timestamp") > DateTime.Now.AddMinutes(minutes) select new { seq.UserSessionSequenceID, seq.SessionGuid, seq .SiteID, seq.IP, seq.UrlTitle, seq.Url, seq.Referer, seq.BrowserWidth, seq.BrowserHeight, seq.Timestamp };

for row_number refer this How To Project a Line Number Into Linq Query Results对于 row_number,请参阅如何将行号投影到 Linq 查询结果中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM