Конвертировать SQL в Linq - как? - PullRequest
0 голосов
/ 04 мая 2011

Возможно ли преобразовать этот 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;

У меня есть класс, содержащий все поля, выбранные из SQL, под названием "SimpleSession".Заранее спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Если честно, я бы предпочел создать View для этого утверждения и использовать это простое представление в Linq2Sql ...

2 голосов
/ 04 мая 2011

Фактически, во многих случаях нет оснований для преобразования сложного SQL в некоторый эквивалент LINQ (даже в случае совместимых операторов).

LinqToSql должен динамически создавать SQLкоманды при запуске любой команды LINQ. Итак, зачем же нам перегружаться, если мы уже знаем, какой запрос SQL лучше всего решить?

Мы можем легко создавать методы LINQ, которые вызывают некоторые View или хранимые процедуры.и возвращает его как типизированные объекты .Ваша программа будет по-прежнему полностью объектно-ориентированной, но без лишних накладных расходов.

0 голосов
/ 09 мая 2011

для первого запроса вы можете использовать это

из seq в tblSequence.AsEnumerable () где seq.Field ("SiteID") == siteID && seq.Field ("Метка времени")> DateTime.Now.AddMinutes (минуты) выберите новый { seq.UserSessionSequenceID, seq.SessionGuid, seq.SiteID, seq.IP, seq.UrlTitle, seq.Url, seq.Referer, seq.BrowserWidth, seq.BrowserHeight, seq.Timestamp };

для row_number см. Это Как спроецировать номер строки в результаты запроса Linq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...