SQL分析器顯示EF發出相同的查詢高達8倍從以下LINQ查詢:如何避免實體框架發出重複查詢?
var query = (from wtv in _context.WorkTypeVersions
join rc in _context.RateCategories on wtv.WTVID equals rc.WTVID
join rsc in _context.RateSubCategories on rc.RCID equals rsc.RCID
where (wtv.Composite == (ckCompositePreambles.Checked ? "Y" : "N")
&& rc.CatCode == catCode)
select new pRateSubCategory()
{
WTVID = wtv.WTVID,
RSCID = rsc.RSCID,
WTVersionName = wtv.WTVersionName,
SubCatCode = rsc.SubCatCode,
PCode = rsc.Preamble.SectionCode,
RateCategoryName = rc.RateCategoryName,
RateSubCategoryName = rsc.RateSubCategoryName,
FullSubCatName = rsc.FullSubCatName,
PMBID = rsc.PMBID,
Preamble = rsc.Preamble
});
dgvRateSubCategories.AutoGenerateColumns = false;
lblSubSectionCount.Text = "SubSections: " + bsRateSubCategories.Count;
dgvRateSubCategories.DataSource = bsRateSubCategories;
bsRateSubCategories.DataSource = query;
的TSQL查詢(產生高達8倍,雖然其它的散佈)是這樣的:
exec sp_executesql N'SELECT
[Project1].[WTVID] AS [WTVID],
[Project1].[RSCID] AS [RSCID],
[Project1].[WTVersionName] AS [WTVersionName],
[Project1].[SubCatCode] AS [SubCatCode],
[Project1].[SectionCode] AS [SectionCode],
[Project1].[RateCategoryName] AS [RateCategoryName],
[Project1].[RateSubCategoryName] AS [RateSubCategoryName],
[Project1].[FullSubCatName] AS [FullSubCatName],
[Project1].[PMBID] AS [PMBID],
[Project1].[PMBID1] AS [PMBID1],
[Project1].[PMB_Level] AS [PMB_Level],
[Project1].[PMB_Text] AS [PMB_Text],
[Project1].[Composite] AS [Composite],
[Project1].[PMB_XPS] AS [PMB_XPS]
FROM (SELECT
[Extent1].[WTVID] AS [WTVID],
[Extent1].[WTVersionName] AS [WTVersionName],
[Extent2].[RateCategoryName] AS [RateCategoryName],
[Extent3].[RSCID] AS [RSCID],
[Extent3].[PMBID] AS [PMBID],
[Extent3].[RateSubCategoryName] AS [RateSubCategoryName],
[Extent3].[SubCatCode] AS [SubCatCode],
[Extent3].[FullSubCatName] AS [FullSubCatName],
[Extent4].[PMBID] AS [PMBID1],
[Extent4].[PMB_Level] AS [PMB_Level],
[Extent4].[SectionCode] AS [SectionCode],
[Extent4].[Composite] AS [Composite],
[Extent4].[PMB_Text] AS [PMB_Text],
[Extent4].[PMB_XPS] AS [PMB_XPS]
FROM [dbo].[WorkTypeVersions] AS [Extent1]
INNER JOIN [dbo].[RateCategories] AS [Extent2] ON [Extent1].[WTVID] = [Extent2].[WTVID]
INNER JOIN [dbo].[RateSubCategories] AS [Extent3] ON [Extent2].[RCID] = [Extent3].[RCID]
LEFT OUTER JOIN [dbo].[Preambles] AS [Extent4] ON [Extent3].[PMBID] = [Extent4].[PMBID]
WHERE ([Extent1].[Composite] = (CASE WHEN (@p__linq__0 = 1) THEN N''Y'' ELSE N''N'' END)) AND ([Extent2].[CatCode] = @p__linq__1)
) AS [Project1]
ORDER BY [Project1].[SubCatCode] ASC, [Project1].[WTVersionName] ASC',N'@p__linq__0 bit,@p__linq__1 varchar(8000)',@p__linq__0=0,@p__linq__1='A'
EF的版本目前是:System.Data.Entity:4.0.0.0,EntityFramework:4.3.1
我在這裏丟失了什麼?
什麼是'dgvRateSubCategories'的類型,並嘗試像'bsRateSubCategories.DataSource = query.ToList();'綁定數據源來防止網格查詢。 –