Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
Добрый день!

решил выучить наконец программирование методом тыка

для практики решил реализовать систему формирования табелей рабочего времени

проблемы возникли сразу же

Хочу реализовать класс Division (подразделение организации) и Employee (работник организации)

если говорить на языке баз данных, между ними соотношение один-ко-многим

а как их связать как объекты?
То есть чтобы можно было сделать, грубо говоря
foreach (Employee worker in someDivision)

и при этом чтобы можно было обратиться к функции Employee.ChangeDivision (Division someAntherDivision)

    class Division {
        int id;
        string name;
    }
    class Employee
    {
        string name;
        string position;
        decimal wagerate;
        }
    }


Вопросы, простите, идиотские
4 окт 17, 12:02    [20841569]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30342
funddd
а как их связать как объекты?

Если не руками, то взять орм и указать ЕМУ отношение.
Всё.
4 окт 17, 12:07    [20841605]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
WitC
Member

Откуда: Индия
Сообщений: 315
funddd,

class Division {
        public int id {get; set;}
        public string name {get; set;}
}

class Employee {
        public string name {get; set;}
        public string position {get; set;}
        public decimal wagerate {get; set;}
        [b]public Division EmplDevision {get; set;}[/b]
        //or
        [b]public int EmplDevID {get; set;}[/b]
}


это требовалось?
4 окт 17, 12:11    [20841618]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
Прошу, нет, умоляю, чуть-чуть раскрыть...
Как это делается руками?
И что такое орм?
4 окт 17, 12:12    [20841620]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
WitC, а как в этом случае организовать перебор Employee, которые принадлежат к someDivision?
4 окт 17, 12:14    [20841627]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
WitC
Member

Откуда: Индия
Сообщений: 315
funddd,

using System.Linq;
//=================


var Employees = List<Employee>(new[]{ new Employee() { EmplDevID = 1 }, new Employee() { EmplDevID = 1 },new Employee() { EmplDevID = 2 } });
var EmplInDevision = Employees.Where(empl=>empl.EmplDevID == 1);
foreach(Employee empl in EmplInDevision )
{
Console.WriteLine("EplDevision: {0}", empl.EmplDevID );
}

Cjnsjle.ReadKey();


если надо в подразделении хранить набор сотрудников:
автор
class Division {
int id;
string name;
Employee[] Employees;
}


как-то так...
4 окт 17, 12:23    [20841677]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2404
если нужно получить список сотрудников для департамента, то можно их просто отфильтровать через
метод расширение Linq Where:

var someDivisionEmployers = emploers.Where(emp => emp.DisvionId = <DivistionId>);
4 окт 17, 12:25    [20841687]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2404
методом тыка вы далеко не уедите, откройте книги и почитайте, это просто.
видео курсы тоже хорошая штука, но книга запоминается на много лучше (имхо).
тогда не придется задавать такие простые вопросы
4 окт 17, 12:26    [20841691]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30342
funddd
И что такое орм?

Библиотека. Делает из базы объекты туда сюда.
4 окт 17, 12:29    [20841705]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
Eак ни странно, я все понял
Спасибо, джентльмены!
PS: Совет читать и смотреть весьма нелишний
4 окт 17, 12:42    [20841749]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 2404
Petro123,

"Туда, сюда, обратно, тебе и мне приятно?" (с) Мурзилка =)
4 окт 17, 16:08    [20842732]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
Перешел к практической реализации

    class Division
    {
        public string Name { get; set; }
        public Employee[] Employees { get; set; }
    }
    class Employee
    {
        public string Name { get; set; }
        public string Position { get; set; }
        public decimal Wagerate { get; set; }
        public Employee (string name, string position, decimal wagerate, Division division)
        {
            this.Name = name;
            this.Position = position;
            this.Wagerate = wagerate;
        }
    }

а как при инициализации Employee добавить в division создающийся объект Employee?
5 окт 17, 08:28    [20844144]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
точнее, а как при инициализации Employee добавить в division.Employees создающийся объект Employee?
5 окт 17, 08:53    [20844164]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
Еще вопрос (на предыдущий уже ответил):
Для использования LINQ обязательно ли вручную составлять коллекцию объектов или есть возможность запросить некий автоматически генерируемый список экземпляров класса?

Задача формирования списка объектов несложная, но если есть возможность переложить ее на автоматику, вероятность ошибки уменьшается в разы :)
6 окт 17, 10:03    [20847224]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
LameUser
Member

Откуда:
Сообщений: 2389
funddd
Добрый день!

решил выучить наконец программирование методом тыка

для практики решил реализовать систему формирования табелей рабочего времени

проблемы возникли сразу же

Хочу реализовать класс Division (подразделение организации) и Employee (работник организации)

если говорить на языке баз данных, между ними соотношение один-ко-многим

а как их связать как объекты?
То есть чтобы можно было сделать, грубо говоря
foreach (Employee worker in someDivision)

и при этом чтобы можно было обратиться к функции Employee.ChangeDivision (Division someAntherDivision)

    class Division {
        int id;
        string name;
    }
    class Employee
    {
        string name;
        string position;
        decimal wagerate;
        }
    }


Вопросы, простите, идиотские


Я бы вам не советовал "выучивать" язык на псевдо задаче.
Нужна реальная задача (требование, потребность) и на ней уже пытаться что-то сделать (выучить язы вы не сможете и это в какой-то мере бесмысленно, т.к. язык не нужно выучивать а нужно понимать).
В реальном же кейсе, помимо примитивного уловия будут (вы же хотите табель сделать):

1. Декретные отпуска
2. Больничные
3. Работа по совместительству (это про вашу связь один ко многим)
4. Обычные отпуска
5. История работы сотрудника (он может в одном месяце работать на разных должностях в случаях перевода из одного подразделения в другое) + увольнения
6. Командировки
7. Повышение квалификации (обучение за счет работадателя)
и т.д.
6 окт 17, 13:09    [20848007]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30342
funddd
Задача формирования списка объектов несложная, но если есть возможность переложить ее на автоматику, вероятность ошибки уменьшается в разы :)

Именно. Я тебе предлагал сделать именно от базы.
Справочник дней рождения из 2-3 таблицы.
Классы будут автоматом от маппинга.
6 окт 17, 20:29    [20849533]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
funddd
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 1367
LameUser, на самом деле задача вполне себе из реальной жизни.
Полный перечень классов и их полей значительно шире :)

Petro123, в примерах и самоучителях часто используется Entity Framework (System.Data.Entity), ОРМ это что-то похожее?
7 окт 17, 06:28    [20850287]     Ответить | Цитировать Сообщить модератору
 Re: Связь классов между собой (помогите разобраться)  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 30342
funddd,
Это оно.
7 окт 17, 10:04    [20850385]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить