簡體   English   中英

將LINQ查詢與實體框架C#結合

[英]Combining LINQ queries with entity framework C#

我有一個linq查詢,它從我的Customer表中選擇幾個字段。

應用於此方法的是多個過濾器,將Func<IQueryable<T>, IQueryable<T>>.Invoke一起.Invoke

原始查詢實質上是select * from customer

篩選方法本質select top 10select top 10

輸出的SQL是select top 10 from (select * from customer)

我的客戶表有超過1,000,000行,這使此查詢大約需要7秒才能在SSMS中執行。 如果我通過在SSMS中運行它來更改輸出SQL以select top 10 from (select top 10 * from customer) ,則查詢是即時的(如您所願)。

我想知道是否有人知道導致LINQ不能很好地組合這些內容的原因,以及是否有我可以實現的最佳實踐/解決方法。

我應該注意,我的實際代碼不是select *,而是選擇了幾個字段,但是沒有什么更復雜的了。

我正在將SQL Server 2008和MVC 3與實體框架一起使用(不確定使用哪個版本)

編輯:我應該添加一路可查詢的內容,直到最后都不會評估任何結果,因此,長時間執行僅限於該行。

我不知道為什么沒有對其進行優化。

如果篩選器方法確實等效於SELECT TOP 10那么您應該可以這樣做:

return query.Take(10);

這將決定select top 10 * from customer而不是您最終遇到的更復雜的事情。

如果這不起作用,那么恐怕我需要更多細節。

編輯:澄清一下,如果您在LINQ中這樣做:

DataItems.Take(10).Take(10)

您將獲得以下SQL:

SELECT TOP (10) [t1].[col1], [t1].[col2]
FROM (
    SELECT TOP (10) [t0].[col1], [t0].[col2]
    FROM [DataItem] AS [t0]
    ) AS [t1]

因此,如果可以以某種方式使用Take(n) ,則可以。

暫無
暫無

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

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