powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в List (с помощью LINQ или лямбда) для внесения изменений
25 сообщений из 60, страница 1 из 3
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313051
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я нашёл всех учителей, начинающихся с "Мал"
Код: c#
1.
2.
List<Teacher> teachersMal =   
    teachers.FindAll(t => t.name.StartsWith("Мал"));  

или
Код: c#
1.
2.
3.
4.
5.
var teachersVar =   
    from t in teachers orderby t.name   
        where t.name.StartsWith("Мал") select t;  
  
List<Teacher> teachersMal = teachersVar.ToList<Teacher>();  



Проблема: элементы нашёл, но в итоге получил их копии. А есть необходимость вносить изменения в них. Как мне найдя элемент иметь ссылку на него, а не его копию?

Преимущество древнего подхода путём простого перебора всей коллекции в том, что при нахождении элемента я знаю, не только этот элемент, но и его местонахождение в массиве.
Т.о. я могу внести изменения и, скажем, изменить зарплату (salary) учителя вдвое.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313060
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

С чего вдруг у тебя там копии
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313076
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Teacher это класс, то ты получил ссылки, если структура - то копию.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313091
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

а если подумать, то в LINQ можно одновременно выбирать и вносить изменения.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313188
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич АлександрCharles Weyland,

а если подумать, то в LINQ можно одновременно выбирать и вносить изменения.
А пример в студию?
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313239
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Если основываться на примере из первого поста, то примерно так.
1. В класс Teacher добавляем функцию для пересчета зарплаты:
Код: vbnet
1.
2.
3.
4.
    Friend Function RecalculateSalary(x As Decimal) As Teacher
        Me.Salary *= x
        Return Me
    End Function


2. В LINQ вызываем ее в select.
Код: vbnet
1.
2.
from t in teachers orderby t.name   
        where t.name.StartsWith("Мал") select t.RecalculateSalary(2)




Все.
получаем сразу список с пересчитаной зарплатой.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313256
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич Александр
Все.
получаем сразу список с пересчитаной зарплатой.

Вот откуда берутся учителя-миллиардеры
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313300
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisВот откуда берутся учителя-миллиардеры

Это о чем?
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313335
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич АлександрЭто о чем?

Можно случайно заджоинить учителя на ведомые им курсы и клево проапдейтить зарплату.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313410
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,

А, ну так это само собой.
Конечно, надо понимать как работает LINQ.

но для простого select вполне рабочий вариант.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313801
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диклевич АлександрЕвгенийВ,

Если основываться на примере из первого поста, то примерно так.
1. В класс Teacher добавляем функцию для пересчета зарплаты:
Код: vbnet
1.
2.
3.
4.
    Friend Function RecalculateSalary(x As Decimal) As Teacher
        Me.Salary *= x
        Return Me
    End Function


2. В LINQ вызываем ее в select.
Код: vbnet
1.
2.
from t in teachers orderby t.name   
        where t.name.StartsWith("Мал") select t.RecalculateSalary(2)




Все.
получаем сразу список с пересчитаной зарплатой.

Нубский код.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313805
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland
Преимущество древнего подхода путём простого перебора всей коллекции в том, что при нахождении элемента я знаю, не только этот элемент, но и его местонахождение в массиве.

Код: c#
1.
var indexed_teachers = teachers.Select((teacher,index) = > new {_teacher = teacher,_index = index} );


Ну и конечно же - у тебя там НЕ КОПИИ.

Но правильней было бы:

Код: c#
1.
filtered_teachers.ToList().ForEach(teacher => teacher.recalculate(2));



ИМХО
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313844
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandПреимущество древнего подхода путём простого перебора всей коллекции в том, что при нахождении элемента я знаю, не только этот элемент, но и его местонахождение в массиве

Код: c#
1.
teachers.Select((e,i) => new { Element = e, Index = i })



Представляешь!?
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313845
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique,

оу, ты уже написал )
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313876
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MonochromatiqueНо правильней было бы:

Код: c#
1.
filtered_teachers.ToList().ForEach(teacher => teacher.recalculate(2));



ИМХО
Один нарушил SRP, другой его подхватил, а сколько скопипастят? :)
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313894
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAОдин нарушил SRP, другой его подхватил, а сколько скопипастят? :)

А где здесь нарушение SRP?
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313914
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAОдин нарушил SRP, другой его подхватил, а сколько скопипастят? :)

А где здесь нарушение SRP?
Учитель пересчитывает себе зарплату.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313935
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и OCP до кучи нарушается :)
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313975
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...


А где здесь нарушение SRP?
Учитель пересчитывает себе зарплату.

Ну ты и зануууууууууууууда.

Мне наверное нужно было сюда код ЗУП 3.0 вывалить, со словами - "СМАРИ-КАК-НАДА"!
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313981
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно, не ЗУП же пишем, можно и наговнить
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39313993
Addx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...


А где здесь нарушение SRP?
Учитель пересчитывает себе зарплату.

Интересно, а если там не учитель, а чиновник?
Они же так и делают )
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39314084
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAУчитель пересчитывает себе зарплату.

А я думал, что времена наивного восприятия ООП: описание объекта и есть объект, уже прошли. Учитель это человек. А Teacher это класс.

Так и не понял, где тут нарушается SRP, и какое отношения семантика имеет к принципу SRP.


skyANAНу и OCP до кучи нарушается :)

А тут вообще непонятно. Где нарушается?
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39314124
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТак и не понял, где тут нарушается SRP, и какое отношения семантика имеет к принципу SRP.

что есть SRP?
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39314130
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВhVosttТак и не понял, где тут нарушается SRP, и какое отношения семантика имеет к принципу SRP.

что есть SRP?

Secure Remote Password )))))))))))

ЗП начисляется без пароля - скайана возбуждается на такие дела.
...
Рейтинг: 0 / 0
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
    #39314134
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Monochromatique,

Если говорить об паталогическом SRP, класс Teacher вовсе не обязательно должен содержать логику расчёта зарплаты. Но это не мешает ему предоставлять метод вычисления ЗП, это отлично ложится в концепцию DDD и ничего не нарушает.
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в List (с помощью LINQ или лямбда) для внесения изменений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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