如何将以下LINQ查询更改为普通sql查询

本文关键字:查询 sql LINQ | 更新日期: 2023-09-27 18:05:21

我有一个查询,我需要这是一个普通的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]

如何将以下LINQ查询更改为普通sql查询

在我看来,最简单的方法是看看LINQ to SQL正在做什么。

使用DataContext.Log将查询信息写入某种日志(例如StringWriter,其内容可以稍后打印出来)。它并不总是最干净的SQL,但在我看来,它是一个很好的起点。

我意识到这并不能回答你的特定的查询的问题,但它试图教你钓鱼,而不是给你一条鱼,因为它是:)

编辑:按照RoccoC5在注释中的建议使用LINQPad是查看LINQ查询生成的SQL的另一种好方法。

以下是LINQ查询生成的SQL,每个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]