2012-09-20 180 views
1

我有一個有2列的表:FruitID,FruitSize。我想寫一個查詢,它包含一個FruitID列表和一個FruitSize列表,併爲所有的水果設置新的FruitSize。用linq-to-sql更新記錄列表

這是我到目前爲止有:

public void ChangeFruitSizes(List<long> TheFruitIDs, long NewFruitSize) 
{ 
    using (SomeDC MyDC = new SomeDC()) 
    { 
     var TheFruits = (from f in MyDC.Fruits 
         where TheFruitIDs.Contains(f.FruitID) 
         select f).ToList(); 

     foreach (Fruits f in TheFruits) 
     { 
      f.FruitSize = NewFruitSize; 
     } 

     MyDC.SubmitChanges(); 

    } 
} 

,目前不能竊聽,但不更新數據庫中的字段。感謝您的建議。

+1

難道你不是指'WhereFruitIDs.Contains(f.FruitID)'? – Adam

+0

有關您的代碼的反饋,[codereview.SE]通常是更好的選擇。 – Adam

+0

@codesparkle:是的,錯字,固定。 – frenchie

回答

2

爲了更簡潔的方式寫這篇文章,你可以嘗試ForEach()列表如下圖所示:

using (SomeDC MyDC = new SomeDC()) 
{ 
    (from f in MyDC.Fruits 
       where TheFruitIDs.Contains(f.FruitID) 
       select f).ToList().ForEach(F => F.FruitSize = NewFruitSize); 

    MyDC.SubmitChanges(); 

} 
+0

@codesparkle:這是如何優化或多或少? – frenchie

+0

謝謝,這看起來更簡潔;這裏有什麼可能出錯的地方? – frenchie

+0

@frenchie,我不這麼認爲。 –

1

只是看代碼的一切是正確的。可能錯誤在於未顯示的內容:模型。我懷疑你沒有定義主鍵。在ID字段上定義主鍵並重新創建模型(從設計器中刪除表並將其添加回)。

+0

是的,該表沒有主鍵:這是一個連接表,FruitID可以多次出現。 – frenchie