[英]Combining LINQ queries with entity framework C#
我有一個linq查詢,它從我的Customer表中選擇幾個字段。
應用於此方法的是多個過濾器,將Func<IQueryable<T>, IQueryable<T>>
與.Invoke
一起.Invoke
。
原始查詢實質上是select * from customer
。
篩選方法本質select top 10
是select 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.