/// <summary> /// Обработать удаление элементов разработки. /// </summary> /// <param name="connectionParams">Параметры соединения.</param> /// <param name="developmentElementsCommandText">Текст SQL-запроса на получение элементов разработки.</param> /// <param name="developmentElementKeyFieldName">Ключевое поле элемента разработки.</param> /// <param name="developmentElementTableName">Имя таблицы элемента разработки.</param> /// <param name="needCheckTableExists">Признак необходимости проверять существование таблицы.</param> /// <param name="developmentElementsFolder">Папка с элементами разработки.</param> /// <param name="deletedCount">Количество удаленных элементов.</param> public static void ProcessDelete(ConnectionParams connectionParams, string developmentElementsCommandText, string developmentElementKeyFieldName, string developmentElementTableName, bool needCheckTableExists, string developmentElementsFolder, out int deletedCount) { deletedCount = 0; using (var connection = ConnectionManager.GetConnection(connectionParams)) { connection.Open(); if (!needCheckTableExists || Utils.TableExists(developmentElementTableName, connection)) { var adapter = new SqlDataAdapter(developmentElementsCommandText, connection); var dataSet = new DataSet(); adapter.Fill(dataSet); var developmentElementsTable = dataSet.Tables[0]; if (Directory.Exists(developmentElementsFolder)) { var directoryItems = new List <string>(Directory.EnumerateDirectories(developmentElementsFolder)); foreach (var directoryFullName in directoryItems) { var directoryName = new DirectoryInfo(directoryFullName).Name; var query = from developmentElement in developmentElementsTable.AsEnumerable() where Utils.EscapeFilePath((string)developmentElement[developmentElementKeyFieldName]) .Trim() .Equals(directoryName, StringComparison.CurrentCultureIgnoreCase) select 1; if (!query.Any()) { Directory.Delete(directoryFullName, true); deletedCount++; } } } } } }