#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 по мере необходимости.