2010-07-24 49 views
0

我有一個非常基本的數據庫模式,並且已經從它創建了一個dbml。兩個表格在一對多中相關。 (A)1 - *(B)...因此每個A得到一個稱爲「BSet」的EntitySet。當使用foreach而不是select時不正確的EntitySet

如果我做的:

foreach (var a in db.A) 
{ 
    Console.WriteLine(a.Name); 
    foreach (var b in a.BSet) 
    { 
    Console.WriteLine(b.Number); 
    } 
} 

我發現它打印出的同一組B的爲每個A.如果我調試L2S SQL日誌,我可以看到它在每次調用B放置時間創建正確的SQL 。儘管如此,它還是爲每個A打印相同的一組B.如果我編寫了一個LINQ Select語句,那麼我會得到正確的結果。

什麼在foreach中被破解?我通常對LINQ的微妙之處很滿意,但這個讓我很困惑!

+0

如果你用'db.A選擇'來替換'db.A',它是否工作? (道歉,如果這就是你的意思,「如果我寫一個LINQ Select語句......」,我不確定。) – 2010-07-24 09:56:57

+0

是的,如果我這樣做的話。 – Schneider 2010-07-24 11:39:20

回答

0

問題是因爲B表中沒有一個主鍵的正確設置。

我已經添加了一個主鍵,我認爲是主鍵,但實際上不是。

0

你的代碼沒問題。很有可能,您的類型化的DataContext中的關聯屬性的設置方式存在問題。檢查設計者中的關聯是否指向每個表中的右列。

另一方面,您的代碼效率低下,因爲它將針對每個內部循環迭代往返數據庫。您可避免寫這作爲一個單一的LINQ查詢往返:

var query = 
    from a in db.A 
    from b in a.BSet 
    select b.Number; 

foreach (var item in query) Console.WriteLine (item); 
+0

是懷疑它與協會有關,但看不到任何明顯的東西。它也奇怪它使用linq查詢 – Schneider 2010-07-24 11:40:05

相關問題