2011-05-27 75 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