private void _applyButton_Click ( object sender, EventArgs e ) { AuthorInfo ethalon = _propertyGrid.SelectedObject as AuthorInfo; if (ReferenceEquals(ethalon, null)) { WriteLine("Не задан эталон"); return; } string familyName = ethalon.FamilyName; if (string.IsNullOrEmpty(familyName)) { WriteLine("Эталон пуст"); return; } TermData[] terms = _termDataBindingSource.DataSource as TermData[]; if (ArrayUtility.IsNullOrEmpty(terms)) { WriteLine("Нет записей для коррекции"); return; } string[] selectedTerms = terms .Where(term => term.Selected) .Select(term => term.Text) .ToArray(); if (ArrayUtility.IsNullOrEmpty(selectedTerms)) { WriteLine("Нет записей для коррекции"); return; } StringBuilder query = new StringBuilder(); bool first = true; foreach (string term in selectedTerms) { if (!first) { query.Append(" + "); } query.AppendFormat ( "\"{0}{1}\"", Prefix, term ); first = false; } try { Provider = GetProvider(); Controller.Run ( () => { int[] found = Provider.Search(query.ToString()); WriteLine ( "Отобрано для коррекции: {0}", found.Length ); foreach (int mfn in found) { MarcRecord record = Provider.ReadRecord(mfn); if (!ReferenceEquals(record, null)) { AuthorInfo[] authors = AuthorInfo.ParseRecord ( record, AuthorInfo.AllKnownTags ); AuthorInfo[] selected = authors.Where ( a => a.FamilyName .SameString(familyName) ) .ToArray(); if (selected.Length == 0) { WriteLine ( "MFN {0} пропущен", mfn ); } else { foreach (AuthorInfo theAuthor in selected) { WriteLine ( "MFN {0}: {1}", mfn, theAuthor.Field ); ethalon.ApplyToField ( theAuthor.Field .ThrowIfNull("theAuthor.Field") ); } Provider.WriteRecord(record); } } } } ); } finally { ReleaseProvider(); } _keyBox_ButtonClick(sender, e); WriteLine("Обработка завершена"); }