powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / обновить элемент в коллекции
17 сообщений из 17, страница 1 из 1
обновить элемент в коллекции
    #38287097
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public Class1
{
public int pk {get;set}
public string name {get;set}
public ObservableCollection<Class2> class2_collection {get;set;}
}

public Class2
{
public int pk {get;set}
public string name {get;set}
}



допустим есть переменная
Код: c#
1.
ObservableCollection<Class1> class1_collection ;



Можно ли, имея переменную int i = 5, в class1_collection найти Class2.PK = 5,и обновить Class2.name = "5", к примеру?
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38287511
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то типа такого

Код: c#
1.
2.
3.
4.
5.
6.
7.
foreach (Class1 item1 in class1_collection)
{
	item1.class2_collection
		.Where(item2 => item2.pk == i)
		.ToList<Class2>()
		.ForEach(item2 => item2.name = 5.ToString());
}



Если не хотите преобразовывать к списку, то определяете свой собственный форич-метод для енумераблов: http://stackoverflow.com/a/823563 .
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38287659
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_Kartmann, паттерн Registry?
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38287850
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сенк.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288099
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320
Код: c#
1.
.Where(item2 => item2.pk == i).ToList<Class2>().ForEach(item2 => item2.name = 5.ToString())


Жесть.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288153
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAErik_Kartmann, паттерн Registry?
Какой еще паттерн, человеку нужно по условию найти элемент(ы) и обновить их. Жжешь...

Код: c#
1.
collection.Single(d => d.EmployeeId == 3).FirstName = "qwerty";



Если элементов несколько, обычный foreach. Всё.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288283
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320
Код: c#
1.
.Where(item2 => item2.pk == i).ToList<Class2>().ForEach(item2 => item2.name = 5.ToString())


Жесть.

5.ToString() радует глаз больше всего
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288384
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ5.ToString() радует глаз больше всего паттернизация головного мозга
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288386
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУskyANAErik_Kartmann, паттерн Registry?
Какой еще паттерн...Классический.
На фига бегать по вложенным коллекциям, если можно взть по ключу из Registry и поменять?
Но если обхода вложенных коллекций достаточно, то я не настаиваю.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288397
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНа фига бегать по вложенным коллекциям, если можно взть по ключу из Registry и поменять?
Я не понимаю, зачем какие-то усложнения для такой элементарной задачи. Особенно, учитывая факт, что в реальной жизни поиск может быть не только по ключу. И это с нынешними-то возможностями LINQ.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288426
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ, написано "найти Class2.PK = 5".
Вот я и подумал, что надо быстро найти элемент именно по ключу. А учитывая фразу "допустим есть переменная", можно предположить, что у ТС есть ещё 100500 подобных "переменных", где надо "найти Class2.PK = 5".

И вообще я ТС свой вопрос адресовал. Он не ответил. Видимо не нужен ему Registry. Так что успокойся.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288437
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не.. не нужен уже:)
зы: переменная одна. PK - уникален для всего class1_collection.
Но можете дальше общаться. Для гугла полезно :)
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288790
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ
Код: c#
1.
collection.Single(d => d.EmployeeId == 3).FirstName = "qwerty";


Ну, если pk уникален, как ТС казал, то тогда Сингле. В противном случае - Вере. Согласны?

А ТуСтринг я делаю, чтобы не возникало вопросов "а чего это строку с числом сравнивают?". Хотя, наверное, лучше было написать пятёрку в кавычках. Я вообще, если не лень, стараюсь явно приводить типы.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288792
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288794
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, сори. Не в ту вкладку запостил! А как обратно?
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288805
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Ну, если pk уникален, как ТС казал, то тогда Сингле. В противном случае - Вере. Согласны?
Не согласен. У тебя лишняя трудозатратная операция ToList.
List<T>.ForEach нужно использовать с умом - то есть только в тех случаях, когда имеем дело именно с List<T>.

user7320Хотя, наверное, лучше было написать пятёрку в кавычках.
Именно.
...
Рейтинг: 0 / 0
обновить элемент в коллекции
    #38288969
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320Ну, если pk уникален, как ТС казал, то тогда Сингле. В противном случае - Вере. Согласны?
Не согласен. У тебя лишняя трудозатратная операция ToList.
List<T>.ForEach нужно использовать с умом - то есть только в тех случаях, когда имеем дело именно с List<T>.
У меня соображения были такие - пройтись форичем по всей коллекции ТС, затем для каждого элемента вложенной коллекции выбрать своё подмножество удовлетворяющих условию элементов (А). Затем применить к каждому элементу из найденного подмножества метод без возврата (Б). Для А - Where, для Б - ForEach с Action. Но т. к. во фреймворке нет встроенного расширяющего ForEach, кроме как для списка, и чтобы не прерывать красивую последовательность вызова методов, привёл к списку (всё равно это не создаст значительных дополнительных расходов - все элементы и полученной, и начальной коллекции будут ссылаться на одни и те же объекты (т. к. они cached ), разве что придётся создать новые ссылки... согласен, при большой коллеции может быть трудозатратно).

А вообще, я вижу несколько вариантов:

1. Как я выше описал.
2. Через вложенный foreach.
3. Через определение своего расширяюего метода ForEach для IEnumerable (что Скит предложил).

Самый простой - 2.

Ваши варианты для неуникального pk?

И да, а почему в вашем варианте Single, а не First или FirstOrDefault?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / обновить элемент в коллекции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]