У меня может быть та же проблема, что и у вас, но я не уверен.
У меня были ObservableCollection
и ListBox
, связанные с ним. Но по какой-то странной причине мой ListBox
не обновлялся, когда я изменил свойства MyEntity
объектов в списке.
После поиска я нашел следующую страницу, и мне просто пришлось сообщить вам:
http://www.wblum.org/listbind/net3/index.html
Это очень хорошее описание того, что вы должны сделать, чтобы получить ListBox
для обновления при изменении списка или объектов в нем. Надеюсь, что вы выиграете от этого.
Если это просто оператор CASE в LINQ после (прочтите ваш комментарий), то примером этого является ...
Int32[] numbers = new Int32[] { 1, 2, 1, 3, 1, 5, 3, 1 };
var numberText =
(
from n in numbers
where n > 0
select new
{
Number = n,
Text =
(
n == 1 ? "One" :
n == 2 ? "Two" :
n == 3 ? "Three" : "Unknown"
)
}
);
Сначала выберите элементы, которые вы хотите обновить. Затем обновите их на обычном C #. Отправьте изменения.
var q = from osc in MyDataContext.osc_products
join cds in cds_oeinvitem on osc.products_model equals cds.itemno into p
where osc.Itemwebflag == 'Y'
select p;
foreach (var item in q)
{
if (item.itempromoflag != "N")
item.products_quantity = 100000;
else if ((new[] { 1, 2, 31 }.Contains(item.itemcat1)) && (item.itemsalestatus == 'S'))
item.products_quantity = 100000;
else if (item.itemsalestatus == 0)
item.products_quantity = 0;
else
item.products_quantity = item.itemqtyonhand - item.itemqtycommitted;
}
MyDataContext.SubmitChanges();
Вот мой прогресс, пока не работает, но это начало:
var query2 = from items in db.cdsItems
where items.ItemTrackingCode.Equals("A") && (items.ItemQtyOnHand - items.ItemQtyCommitted) > 0
select new {
items,
qty =
(
items.ItemPromoFlag.Equals("1") ? "100000" :
items.ItemCat1.Equals("1") ? "100000" :
items.ItemSaleStatus.Equals("O") ? "0" :
(items.ItemQtyOnHand - items.ItemQtyCommitted).ToString
)
};
Этот синтаксис кажется таким неудобным для мне ... Я могу просто пропустить sql.
В Linq нет оператора «Обновить» (какой бы вариант вы ни использовали, будь то LinqToSQL или LinqToEntities).
Linq строго предоставляет язык запросов.
Если вы используете LinqToSQL и хотите обновить данные, вам нужно сначала запросить контекст для элементов, которые вам нужно обновить, затем перебрать их, чтобы изменить их свойства, и, наконец, вызвать SubmitChanges, чтобы сохранить изменения в базе данных.
использование вашего единственного оператора UPDATE в хранимой процедуре будет лучше, чем выполнение цикла обновлений на сервере приложений.
Вы выполняете массовое обновление, но ссылка - это чисто инструмент для запросов и выбора объекта. Используйте подходящий инструмент для работы ... которым в данном случае определенно является сервер базы данных.
http://bartdesmet.net/blogs/bart/archive/2008/03/30/a-functional-c-type-switch.aspx рассказывает о реализации функционального переключателя чехол.