2012-04-26 215 views
0

我試圖選擇一條記錄。 在db中,我有第一個月和第四個月的兩個記錄。LINQ實體框架選擇記錄

我需要獲取第1和第4月的值,但是我得到的值是第1個月的迭代次數(第1月和第4月) 。

EX:以dB爲單位月1的值是:55和第4月的值是22,但我在第1和第4個月的值爲55,而在代碼中迭代。

for (var month = 1; month <= 12; month++) 
      { 
    var itemMonth = month; 
    var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => i.SKU == itemSku && i.Month == itemMonth && i.Year==itemYear); 
    // 
    } 
if (itemAuditReport == null) 
        { 
// Do Something 
} 

我錯過了什麼嗎?

+1

你的代碼很好。仔細檢查你的數據或者運行下面的sql來查看你是否得到相同的結果。 select * from itemAuditReport i where i.SKU = itemSku && i.Month = 1 && i.Year = itemYear; select * from itemAuditReport i where i.SKU = itemSku && i.Month = 4 && i.Year = itemYear; – 2012-04-26 18:25:23

+0

如果我通過明確指定月份爲1和4來運行代碼,我會得到正確的不同結果。所以肯定有些代碼是錯誤的。 – Nanu 2012-04-26 23:38:55

回答

0

是的,在實體框架模型按鍵沒有設置正確,SKU設定爲與標題主鍵。在模型中,因此帶來相同的結果集。

我改變了要應用在Sku,Month和Year上的密鑰,它工作的很棒!

1

你爲什麼不嘗試一下

我猜測itemAuditReport是相同的項目會被分配在迭代造成的問題,所以使用列表,並在其中

List<Item> item = null; 

for (var month = 1; month <= 12; month++) 
{ 
var itemMonth = month; 
var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => i.SKU == itemSku && 
         i.Month == itemMonth && i.Year==itemYear); 
if(itemAuditReport!=null) 
    item.Add(itemAuditReport); 
// 
} 
+0

這個解決方案可以解決你的問題,但之前我碰到過類似的問題,但原因不同。我還建議在有機會時定義明顯的類型,併爲不明確的類型留下變量。 – 2012-04-26 19:04:26

+0

我不明白這與OP的代碼有什麼不同。 itemAuditReport會得到相同的結果,但你只是檢查它是否爲null。 OP的問題是itemAuditReport獲取無效結果。 – 2012-04-27 04:19:07

+0

@RayCheng - 即時通訊推送列表中的數據不使用該變量後fatching記錄...這可能是問題的原因... – 2012-04-27 04:20:29

1

像約翰Sykor建議,試試這個:

for (var month = 1; month <= 12; month++) 
{ 
    var itemMonth = month; 
    var year = itemYear; 
    var sku = itemSku; 
    var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => 
     i.SKU == sku && i.Month == itemMonth && i.Year==year); 
} 

下面的例子解釋更多:

該電源輸出10個十倍。

List<Action> actions = new List<Action>(); 
for (int i = 0; i < 10; i++) 
{ 
    actions.Add(() => Console.WriteLine(i)); 
} 
foreach (Action action in actions) 
{ 
    action(); 
} 

但下面的輸出0 ... 9預期

List<Action> actions = new List<Action>(); 
for (int i = 0; i < 10; i++) 
{ 
    var x = i; //<--important line 
    actions.Add(() => Console.WriteLine(x)); 
} 
foreach (Action action in actions) 
{ 
    action(); 
} 
+0

我已經指定一個單獨的變量來保存月份的值。 – Nanu 2012-05-01 16:59:06