2013-05-08 99 views
2

大家好我都喜歡這裏面的EntityFramework代碼(我想在同一時間,我不知道我們是否可以使用一個循環這樣的改變許多項目,但它拋出這樣一個異常:實體框架例外

LINQ到實體無法識別方法 '的Int32 get_Item(的Int32)' 方法,和這種方法不能被翻譯成表達商店

代碼:

 try 
     { 
      for (int j = 0; j < ids.Count; j++) 
      { 
       using (OzgorenEntities2 context = new OzgorenEntities2()) 
       { 
         Stock st = context.Stocks.First(i => i.id == ids[j]); 
         st.stockAmount = amounts[j]; 
         context.SaveChanges(); 
       } 
      } 
      return true; 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

老實說,我搜索,只發現轉換不在服務器端工作,但我不轉換它在那裏可能是我的解決方案?

感謝

+3

LINQ到實體是越來越絆倒你使用'IDS [J]'在查詢的值。這完全是顯而易見的你和我,你只是想在陣列中使用的值,但據查詢供應商來講,你要訪問陣列上稱爲'get_Item'索引屬性,它不」不知道如何爲此生成SQL代碼。 – 2013-05-08 15:41:28

回答

5

嘗試定索引處推出針對IDS值的變量

  using (OzgorenEntities2 context = new OzgorenEntities2()) 
      { 
        var id = ids[j]; 
        Stock st = context.Stocks.First(i => i.id == id); 
        st.stockAmount = amounts[j]; 
        context.SaveChanges(); 
      } 
2

你應該中間變量添加到存儲值ids[j]

try 
    { 
     for (int j = 0; j < ids.Count; j++) 
     { 
      var tempId = ids[j]; 
      using (OzgorenEntities2 context = new OzgorenEntities2()) 
      { 
        Stock st = context.Stocks.First(i => i.id == tempId); 
        st.stockAmount = amounts[j]; 
        context.SaveChanges(); 
      } 
     } 
     return true; 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 

這是由於IQueriable表達式的性質。 LINQ to Entities不知道如何將i => i.id == ids[j]表達式轉換爲SQL語句。

+0

非常感謝我一直在努力,直到早上:)) – albatross 2013-05-08 23:02:40