public IList <Translation> GetTranslationsById(IEnumerable <int> ids, bool reverse) { var idsList = ids.ToList(); var data = TranslationsRepository.GetAll().Where(x => idsList.Contains(x.Id)); return(reverse ? ReverseTranslations(data).ToList() : data.ToList()); }
public int InsertOrUpdate(DictionaryDTO dictionaryVo) { using (var transaction = Context.Database.BeginTransaction()) { try { var dictionary = Mapper.Map <Dictionary>(dictionaryVo); if (dictionary.Id > 0) { Context.Entry(dictionary).State = EntityState.Modified; DictionariesRepository.Update(dictionary); } else { dictionary.Date = DateTime.Now; dictionary.ParentDictionaryId = null; DictionariesRepository.Insert(dictionary); } DictionariesRepository.Save(); dictionaryVo.TranslationList.ToList().ForEach(x => x.DictionaryId = dictionary.Id); var translations = dictionaryVo.TranslationList.Select(x => x.Id).ToList(); var currentTranslations = TranslationsRepository .GetAll() .Where(x => x.DictionaryId == dictionary.Id) .ToList(); var ids = currentTranslations.Select(x => x.Id).ToList(); var toDelete = currentTranslations.Where(x => !translations.Contains(x.Id)).ToList(); var toAdd = dictionaryVo.TranslationList?.Where(x => !ids.Contains(x.Id)).ToList() ?? new List <Translation>(); var toUpdate = dictionaryVo.TranslationList?.Where(x => ids.Contains(x.Id)).ToList() ?? new List <Translation>(); foreach (var trans in toDelete) { GameSessionTranslationsRepository.DeleteByTranslationId(trans.Id); TranslationsRepository.Delete(trans); } foreach (var trans in toUpdate) { TranslationsRepository.Update(trans); } foreach (var trans in toAdd) { TranslationsRepository.Insert(trans); } TranslationsRepository.Save(); transaction.Commit(); return(dictionary.Id); } catch (Exception) { transaction.Rollback(); return(-1); } } }