簡體   English   中英

如何將以下 LINQ 查詢更改為普通 sql 查詢

[英]How can i change the following LINQ query as normal sql query

我有一個查詢,我需要將其作為普通的 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 在做什么。

使用DataContext.Log將查詢信息寫到某種類型的日志中(例如,寫到StringWriter中,您可以在之后打印出其內容)。 它並不總是最干凈的 SQL,但它是 IMO 的一個很好的起點。

我意識到這並不能回答您特定查詢的問題,但它試圖教您釣魚而不是給您一條魚,因為它是:)

編輯:按照 RoccoC5 在評論中的建議使用LINQPad是查看為 LINQ 查詢生成的 SQL 的另一種好方法。

這是每個 LINQPad 由 LINQ 查詢生成的 SQL,其中@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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM