Как я могу изменить следующий запрос LINQ как обычный запрос SQL - PullRequest
1 голос
/ 13 августа 2011

У меня есть запрос, который мне нужен, так как простой SQL-запрос может мне помочь. Также есть ли альтернативный способ без использования NorthWindDatacontext, как указано в коде, упомянутом ниже. Мой код выглядит следующим образом:

private void FetchData(int take, int pageSize)
{           
  using (NorthwindDataContext dc = new NorthwindDataContext())
  {
    var query = from p in dc.Customers
         .OrderBy(o => o.ContactName)
          .Take(take)
            .Skip(pageSize)
        select new
                        {
                          ID = p.CustomerID,
                            Name = p.ContactName,
                            Count = dc.Customers.Count()
                        };

            PagedDataSource page = new PagedDataSource();
            page.AllowCustomPaging = true;
            page.AllowPaging = true;
            page.DataSource = query;
            page.PageSize = 10;
            Repeater1.DataSource = page;
            Repeater1.DataBind();

            if (!IsPostBack)
            {
                RowCount = query.First().Count;
                CreatePagingControl();
            }
        }
    }

Я пытался согласно Jon, но я не могу получить желаемый результат, может ли кто-нибудь мне помочь

(SELECT [t1].[CustomerID] AS [ID], [t1].[ContactName] AS [Name], (
    SELECT COUNT(*)
    FROM [dbo].[Customers] AS [t2]
    ) AS [Count]
FROM (
    SELECT TOP (10) [t0].[CustomerID], [t0].[ContactName]
    FROM [dbo].[Customers] AS [t0]
    ORDER BY [t0].[ContactName]
    ) AS [t1]
ORDER BY [t1].[ContactName]

Ответы [ 2 ]

2 голосов
/ 13 августа 2011

Самый простой способ, на мой взгляд, это посмотреть, что делает LINQ to SQL.

Используйте DataContext.Log для записи информации о запросе в какой-либо журнал (например, в StringWriter, содержимое которого вы можете распечатать позже). Это не всегда будет самый чистый возможный SQL, но это хорошая отправная точка IMO.

Я понимаю, что это не отвечает на вопрос для вашего конкретного запроса, но он пытается научить вас ловить рыбу, а не давать вам рыбу, как это было бы:)

РЕДАКТИРОВАТЬ: Использование LINQPad , как предложено RoccoC5 в комментариях, является еще одним отличным способом увидеть SQL, сгенерированный для запроса LINQ.

1 голос
/ 13 августа 2011

Вот SQL, созданный вашим запросом LINQ для каждой LINQPad, где @p0 - количество пропускаемых строк:

SELECT [t3].[CustomerID] AS [ID], [t3].[ContactName] AS [Name], (
    SELECT COUNT(*)
    FROM [Customers] AS [t4]
    ) AS [Count]
FROM (
    SELECT [t2].[CustomerID], [t2].[ContactName], [t2].[ROW_NUMBER]
    FROM (
        SELECT ROW_NUMBER() OVER (ORDER BY [t1].[ContactName]) AS [ROW_NUMBER], [t1].[CustomerID], [t1].[ContactName]
        FROM (
            SELECT TOP (10) [t0].[CustomerID], [t0].[ContactName]
            FROM [Customers] AS [t0]
            ORDER BY [t0].[ContactName]
            ) AS [t1]
        ) AS [t2]
    WHERE [t2].[ROW_NUMBER] > @p0
    ) AS [t3]
ORDER BY [t3].[ROW_NUMBER]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...