所以我剛碰到這個非常奇怪的場景,想知道是否有人可能知道問題是什麼。我有以下EF Linq查詢。EF返回不同於查詢的值
var hierarchies = (from hierarchy in ctx.PolygonHierarchyViews
where hierarchy.DashboardId == dashboardId
select hierarchy);
當我檢查在調試器,查詢它顯示了以下SQL
SELECT
[Extent1].[DashboardId] AS [DashboardId],
[Extent1].[CurrentId] AS [CurrentId],
[Extent1].[PolygonTypeId] AS [PolygonTypeId],
[Extent1].[DisplayName] AS [DisplayName],
[Extent1].[ParentId] AS [ParentId]
FROM [dbo].[PolygonHierarchyView] AS [Extent1]
WHERE [Extent1].[DashboardId] = @p__linq__0
如果我運行在SQL Server Management Studio中substituding @p__linq__0
與dashboardId
值。我得到了這些結果。
DashboardId CurrentId Type Name ParentId
4 5 1 Region NULL
4 6 2 Market NULL
4 7 3 SubMarket 6
4 8 4 ZipCode 7
4 6 2 Market 5
4 7 3 SubMarket 6
4 8 4 ZipCode 7
但是,迭代EF查詢的結果如下。
DashboardId CurrentId Type Name ParentId
4 5 1 Region NULL
4 6 2 Market NULL
4 7 3 SubMarket 6
4 8 4 ZipCode 7
4 6 2 Market NULL
4 7 3 SubMarket 6
4 8 4 ZipCode 7
注意,第五行有NULL
的ParentId
,而不是5.這是我的工作是如何解決該問題。
var hierarchies = (from hierarchy in ctx.PolygonHierarchyViews
where hierarchy.DashboardId == dashboardId
group hierarchy by hierarchy.ParentId into grp
select grp).AsEnumerable();
這裏的奇怪的是,這導致IGrouping
爲5的Key
值,但該組中的單個對象的ParentId
是null
。
我試圖創造從查詢lookup
,並希望只是做
var lookup = hierarchies.ToLookup(h => h.ParentId);
但由於實際ParentId
似乎並不總是正確的價值,我必須做的組我最終不得不做以下
var lookup = hierarchies.SelectMany(x => x.Select(y => new { x.Key, View = y }))
.ToLookup(h => h.Key, h => h.View);
爲了使事情更奇怪的,如果我做SelectMany
和ToLookup
之前從查詢結束的AsEnumerable
它仍然會導致應該有一個ParentId
5的實體被編組在null
之下。
這是EF的一些類型的錯誤還是我只是在這裏失去了一些東西?順便說一句我正在使用EF 6.1.3。
什麼是parentid?它是dashboardid嗎?即。該行的父母? dashboardrow id = 5是否存在? – Thorarins
@ Thorarins'ParentId'是到'CurrentId'的鏈接。所以第三排是第二排的孩子。第五行應該是第一行的孩子,而不是頂級父母。 – juharr
我很確定這是由視圖中的非唯一主鍵(如EF知道它)造成的。 –