приведение iqueryable

#iqueryable

#iqueryable

Вопрос:

как мне выполнить приведение к CartItem?

               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);
  

следующее решение выдает мне эту ошибку >

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

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

ОШИБКА: оператор принуждения не определен между типами ‘<>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);
  

ошибка: не удается добавить объект с ключом, который уже используется.

Комментарии:

1. Извините, я выразился не так ясно, как мог бы — я обновил свой ответ, чтобы привести пример того, что я имею в виду.

2. почему он не обновляет элемент при подключении? и выдайте эту ошибку

Ответ №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 имеет пустой конструктор — очевидно, вы можете адаптировать SELECT по мере необходимости.