2011-05-27 68 views
0

如何投射到cartItem?cast iqueryable

   var newItem = from i in dc.CartItems 
           where i.productID == item.productID 
           select new {productID = i.productID, 
              Quantity = i.Quantity + item.Quantity , 
              cartID = item.cartID }; 

      CartItem itemToUpdate = (here??)newItem; 
      dc.CartItems.Attach(itemToUpdate, true); 

下一個解決方案給我此錯誤>

ERROR:沒有強迫操作者類型之間定義的 '<> f__AnonymousType2`3 [System.Int32,System.Int32,System.String]'和'CartItem'。

這個怎麼樣代碼:這使錯誤太

  if (IfExist(item)) 
     { 
      //if this product id in cart 

      // get the quantity of existing cartItem 
      int quantity = (from i in dc.CartItems 
        where i.productID == item.productID 
        select i).First().Quantity; 

      // sum quanitities of existing and just inserted item 

      item.Quantity += quantity; 

      dc.CartItems.Attach(item, true); 

錯誤:無法用鑰匙已在使用添加的實體。

+0

對不起,我沒有那麼清楚,我已經更新了我的答案,舉了一個我的意思的例子。 – reavowed 2011-05-27 12:11:17

+0

爲什麼它在附加時更新項目?並給出該錯誤 – freeTayyeb 2011-05-27 13:02:18

回答

1

直接投射並不是真的可行 - 你可能想讓這個SELECT創建一個新的CartItem而不是匿名類型。

編輯:我的意思是,你可以試試:

List<CartItem> newItem = (from i in dc.CartItems 
          where i.productID == item.productID 
          select new CartItem {productID = i.productID, 
               Quantity = i.Quantity + item.Quantity , 
               cartID = item.cartID }) 

CartItem itemToUpdate = newItem.First(); 
dc.CartItems.Attach(itemToUpdate, true); 

這是假設你的CartItem類有一個空的構造 - 很明顯,你可以根據需要調整選擇。

+0

此代碼也會造成錯誤 – freeTayyeb 2011-05-27 12:44:15