我从CSV文件创建一个模块,并带有一个默认的Submodule,每个Submodule都包含段(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的段数从默认子模块中提取到每个新的子模块中。有正确的方法吗? ,据我所知(一点),我需要先将它们添加到上下文中,然后保存以获取ID。然后从默认值中除第一个ChunkSize之外的所有值都添加到第二个中,然后递归地对每个重复。 感觉到很多代码,并且为此感到混乱。也许我缺少使用linq或方法的神奇方法。
编辑:提出了这个解决方案,但感觉比原来应该的要肮脏和复杂...
EDIT2:在我需要使用Child.Parent = newParent对象的地方阅读。