Нужна помощь в создании новых отцов и эффективном перераспределении детей - PullRequest
1 голос
/ 25 марта 2019

Я создаю модуль из CSV-файла с субмодулем по умолчанию, каждый субмодуль содержит сегменты (каждая строка из CSV), теперь мне нужно разделить сегменты на множество субмодулей. Когда я создал проект, я создал 1 подмодуль по умолчанию со всеми сегментами как дочерними для него. Теперь для кода:

public Modules splitModule(int id, string type, int amount){
        var ModuleSplit = _context.Modules.Include(x=>x.SourceLang).Where(x=>x.Id == id).FirstOrDefault();
        var DefaultSubM = _context.Submodules.Include(x=>x.Segments).Where(x=>x.ModuleId == ModuleSplit.Id).FirstOrDefault();
        List<Submodules> listToAdd = new List<Submodules>();
        if(type == "linguists"){
            //linguists = rows / linguists , rounded 
            var rowAmount = DefaultSubM.Segments.Count();
            int chunkSize =  rowAmount / amount ;

            for(int i=0 ; i< amount-1 ; i++){
                Submodules newSub = new Submodules();
                newSub.Status = Abr.Active;
                newSub.Token = Guid.NewGuid().ToString();
                listToAdd.Add(newSub);
            }

            _context.Submodules.AddRange(listToAdd);
            _context.SaveChanges();

            var skipAm = rowAmount;
            if(rowAmount % amount != 0){
                skipAm++;
            }

            foreach(var a in listToAdd){
                var subL = DefaultSubM.Segments.Take(rowAmount).Skip(skipAm);
                foreach(var b in subL){
                    a.Segments.Add(b);
                    DefaultSubM.Segments.Remove(b);
                }
            }
            _context.SaveChanges();
        }

Мне нужно взять количество сегментов ChuckSize из субмодуля по умолчанию в каждом новом. Есть ли правильный способ сделать это? из того, что я знаю (мало), мне нужно было бы сначала добавить их в контекст, сохранить, чтобы получить идентификаторы. затем возьмите все, кроме первого ChunkSize, из стандартного и добавьте их ко второму, а затем повторите для каждого рекурсивно. Почувствуйте, как много кода, и запутаться Может быть, мне не хватает волшебства с помощью linq или метода.

РЕДАКТИРОВАТЬ: Придумал это решение, но чувствует себя грязным и более сложным, чем он должен быть ...

РЕДАКТИРОВАТЬ 2: Где-то читать, мне нужно использовать Child.Parent = newParent Object.

...