Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Поиск в List (с помощью LINQ или лямбда) для внесения изменений / 25 сообщений из 60, страница 1 из 3
22.09.2016, 01:38
    #39313051
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
Вот я нашёл всех учителей, начинающихся с "Мал"
Код: 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
22.09.2016, 04:16
    #39313060
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
Charles Weyland,

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

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

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

Если основываться на примере из первого поста, то примерно так.
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
22.09.2016, 11:31
    #39313256
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
Диклевич Александр
Все.
получаем сразу список с пересчитаной зарплатой.

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

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

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

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

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

Если основываться на примере из первого поста, то примерно так.
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
23.09.2016, 00:23
    #39313805
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
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
23.09.2016, 07:48
    #39313844
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в List (с помощью LINQ или лямбда) для внесения изменений
Charles WeylandПреимущество древнего подхода путём простого перебора всей коллекции в том, что при нахождении элемента я знаю, не только этот элемент, но и его местонахождение в массиве

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



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

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

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



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

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

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


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

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

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


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

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

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

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


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

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

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

что есть SRP?

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

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

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


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