2012-07-27 114 views
1

我有一個數據庫中的查詢:LINQ不返回所有子記錄

SELECT GreenInventoryBlendGradeID,bgx.blendgradeid, 
     bgX.GreenBlendGradeTypeID,[Description] 
    FROM [GreenInventory] gi 
INNER JOIN [GreenInventoryBlendGradeXref] bgX 
    ON bgX.[GreenInventoryID] = gi.[GreenInventoryID] 
INNER JOIN [BlendGrade] bg 
    ON bg.[BlendGradeID]=bgx.[BlendGradeID] 

返回3個記錄:

TYPEID說明


1 XR
2 XR
1 XF2

的LINQ:

​​

我已經嘗試了不同的Where子句包括簡單 - (X => x.GreenInventoryID == ID) 但始終只有第2個返回記錄。

任何想法?

如果我嘗試以下方法:

var GreenInventory = (from gi in Session.GreenInventory.Where(y => y.GreenInventoryID == id) 
join bgX in Session.GreenInventoryBlendGradeXref.DefaultIfEmpty() on gi.GreenInventoryID equals bgX.GreenInventoryID 
join bg in Session.BlendGrade.DefaultIfEmpty() on bgX.BlendGradeID equals g.BlendGradeID 
select new { GreenInventory = gi, GreenInventoryBlendGradeXref = bgX, BlendGrade = bg }); 

我回來每個對象的3和正確的信息在BlendGrade對象。它看起來像3個GreenInventory對象是相同的。它們每個都包含兩個GreenInventoryBlendGradeXref對象,它們顯示與以前相同的兩條記錄。

所以我不清楚原來的問題是什麼。也不知道這是否是解決問題的最佳方法。

感謝您的答案。如果有人有進一步的想法,請讓我們知道。

+0

使用以下內容: – mackjazzy 2012-07-27 14:37:06

回答

0

我看的第一個地方就是你的模型,並加入你在實體之間定義的模型。您可能還需要檢查你生成的SQL語句:

Trace.WriteLine(GreenInventory.Provider.ToString())

或使用Visual Studio的IntelliTrace調查什麼被髮送到數據庫。

+0

我從現有數據庫創建模型。 – mackjazzy 2012-07-27 13:18:40

+0

是的,我的模型從數據庫沒有正確更新,以包含GreenInventoryBlendGradeXref表的新主鍵。如果我可以的話,我會把這個標記爲答案:) – mackjazzy 2012-07-31 14:16:37

1

根據您提供的一些細節,我會假設您缺少連接。我對EntityFramework沒有經驗(我假設你使用這個ORM),但據我所知,「.Include」試圖確保根實體集不會改變,並且不會包含重複項。

您手動創建的查詢似乎表明模型中至少存在一個1:n關係。您從LINQ獲得的結果顯示僅返回不同的GreenInventory實體。

因此,您需要調整您的查詢並顯式聲明您想要所有結果(而不僅僅是不同的根實體) - 我會假設使用顯式連接EntityFramework將產生所有預期結果 - 或者您需要調整映射。