private void WriteArticlesToDb() { switch (_importSettings.ImportAction) { case (int)CsvImportMode.InsertAll: InsertArticles(_articlesListFromCsv); break; case (int)CsvImportMode.InsertAndUpdate: var existingArticles = UpdateArticles(_articlesListFromCsv); var remainingArticles = _articlesListFromCsv.Filter(a => !existingArticles.GetBaseArticleIds().Contains <int>(a.Id)); InsertArticles(remainingArticles); break; case (int)CsvImportMode.Update: UpdateArticles(_articlesListFromCsv); break; case (int)CsvImportMode.UpdateIfChanged: var changedArticles = _articlesListFromCsv.Filter(a => a.Created == DateTime.MinValue); UpdateArticles(changedArticles); break; case (int)CsvImportMode.InsertNew: var nonExistingArticles = GetArticles(_articlesListFromCsv, false); InsertArticles(nonExistingArticles); break; default: throw new NotImplementedException($"Неизвестный режим импорта: {_importSettings.ImportAction}"); } }
private ExtendedArticleList GetArticles(ExtendedArticleList articlesList, bool onlyExisting) { ExtendedArticleList existingArticles; if (_importSettings.UniqueContentField == null) { var existingIds = GetExistingArticleIds(articlesList.GetBaseArticleIds()); existingArticles = articlesList.Filter(a => !onlyExisting ^ existingIds.Contains(a.Id)); } else { existingArticles = new ExtendedArticleList(articlesList); var existingIdsMap = GetExistingArticleIdsMap(_uniqueValuesList, _importSettings.UniqueContentField.Name); for (var i = 0; i < articlesList.Count; i++) { var article = articlesList[i]; var uniqueValue = _uniqueValuesList[i]; var articleExists = existingIdsMap.ContainsKey(uniqueValue); if (articleExists) { article.BaseArticle.Id = existingIdsMap[uniqueValue]; } if (!onlyExisting ^ articleExists) { existingArticles.Add(article); } } } return(existingArticles); }