2013-03-21 73 views
1

什么会导致此查询。要开始只投射c而不填充其子集合ParcelValuesLINQ to Entities查询不投影子集合

var result = (from c in _context.Parcels.Include("ParcelValues") 
where c.STRAP == strap 
select c); 

我跑我的应用程序和上面将返回IQueryable<Parcel>类型的result对象被填充有正确的记录属性Request.ParcelValues。现在,出于某种原因,无论我如何尝试使用包含,只会投射包裹字段。

生成的SQL

exec sp_executesql N'SELECT 
[Project2].[LAND_AREA] AS [LAND_AREA], 
[Project2].[STRAP] AS [STRAP], 
[Project2].[SITUS] AS [SITUS], 
[Project2].[ZIP_CODE] AS [ZIP_CODE], 
[Project2].[MAILING_ADDRESS] AS [MAILING_ADDRESS], 
[Project2].[PROPERTY_USE] AS [PROPERTY_USE], 
[Project2].[SUBDIVISION] AS [SUBDIVISION], 
[Project2].[DSCR] AS [DSCR], 
[Project2].[INCORPORATION] AS [INCORPORATION], 
[Project2].[SEC_TWP_RGE] AS [SEC_TWP_RGE], 
[Project2].[CENSUS] AS [CENSUS], 
[Project2].[WATERFRONT] AS [WATERFRONT], 
[Project2].[C1] AS [C1], 
[Project2].[ID] AS [ID], 
[Project2].[STRAP1] AS [STRAP1], 
[Project2].[YEAR] AS [YEAR], 
[Project2].[LAND] AS [LAND], 
[Project2].[IMPROVEMENT] AS [IMPROVEMENT], 
[Project2].[JUST] AS [JUST], 
[Project2].[ASSESSED] AS [ASSESSED], 
[Project2].[TAXABLE] AS [TAXABLE] 
FROM (SELECT 
    [Limit1].[STRAP] AS [STRAP], 
    [Limit1].[SITUS] AS [SITUS], 
    [Limit1].[ZIP_CODE] AS [ZIP_CODE], 
    [Limit1].[MAILING_ADDRESS] AS [MAILING_ADDRESS], 
    [Limit1].[PROPERTY_USE] AS [PROPERTY_USE], 
    [Limit1].[SUBDIVISION] AS [SUBDIVISION], 
    [Limit1].[DSCR] AS [DSCR], 
    [Limit1].[LAND_AREA] AS [LAND_AREA], 
    [Limit1].[INCORPORATION] AS [INCORPORATION], 
    [Limit1].[SEC_TWP_RGE] AS [SEC_TWP_RGE], 
    [Limit1].[CENSUS] AS [CENSUS], 
    [Limit1].[WATERFRONT] AS [WATERFRONT], 
    [Extent2].[ID] AS [ID], 
    [Extent2].[STRAP] AS [STRAP1], 
    [Extent2].[YEAR] AS [YEAR], 
    [Extent2].[LAND] AS [LAND], 
    [Extent2].[IMPROVEMENT] AS [IMPROVEMENT], 
    [Extent2].[JUST] AS [JUST], 
    [Extent2].[ASSESSED] AS [ASSESSED], 
    [Extent2].[TAXABLE] AS [TAXABLE], 
    CASE WHEN ([Extent2].[ID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1] 
    FROM (SELECT TOP (1) 
     [Extent1].[STRAP] AS [STRAP], 
     [Extent1].[SITUS] AS [SITUS], 
     [Extent1].[ZIP_CODE] AS [ZIP_CODE], 
     [Extent1].[MAILING_ADDRESS] AS [MAILING_ADDRESS], 
     [Extent1].[PROPERTY_USE] AS [PROPERTY_USE], 
     [Extent1].[SUBDIVISION] AS [SUBDIVISION], 
     [Extent1].[DSCR] AS [DSCR], 
     [Extent1].[LAND_AREA] AS [LAND_AREA], 
     [Extent1].[INCORPORATION] AS [INCORPORATION], 
     [Extent1].[SEC_TWP_RGE] AS [SEC_TWP_RGE], 
     [Extent1].[CENSUS] AS [CENSUS], 
     [Extent1].[WATERFRONT] AS [WATERFRONT] 
     FROM [dbo].[PARCELS] AS [Extent1] 
     WHERE [Extent1].[STRAP] = @p__linq__0) AS [Limit1] 
    LEFT OUTER JOIN [dbo].[PARCEL_VALUES] AS [Extent2] ON [Limit1].[STRAP] = [Extent2].[STRAP] 
) AS [Project2] 
ORDER BY [Project2].[STRAP] ASC, [Project2].[C1] ASC',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'0001020003' 
+0

是否使用实体框架,或者您使用LINQ到SQL?他们不是一回事! :) – 2013-03-21 20:41:01

+0

对不起。我正在使用Entity Framwork。 – 2013-03-21 20:50:00

+0

查询明确地从'PARCEL_VALUES'表中选择字段。你是否确定表中有相关​​的值? – 2013-03-21 20:53:37

回答

0

知道你的数据

因此,它结束了,我的整个问题正在由实体框架的一个已知的设计特性/错误引起的(视你如何看待它)和我的数据。我用nchar(25)将表中的密钥从varchar(16)中导入到我的表中。在填充我的目标之前,大多数表格都是在修剪密钥。除了单独查询时,我忘了修整表格上似乎不会加载的按键。所以,事实证明,EF不能延迟加载相关的表格,其中一些在键中有空白(空格必须匹配)。

一旦我更新了我的脚本加载我所有的目标SANS空白。问题解决了。