protected void OnButtonFineDuplicatesClicked(object sender, EventArgs e) { progressOp.Visible = true; progressOp.Adjustment.Value = 0; progressOp.Text = "Получаем дубликаты адресов из базы..."; QSMain.WaitRedraw(); DeliveryPoint mainPointAlias = null; var dublicateSubquery = QueryOver.Of <DeliveryPoint>() .Where(x => x.Counterparty.Id == mainPointAlias.Counterparty.Id && x.Latitude == mainPointAlias.Latitude && x.Longitude == mainPointAlias.Longitude && x.Id != mainPointAlias.Id && (x.Code1c == null || mainPointAlias.Code1c == null || x.Code1c == mainPointAlias.Code1c)) .Select(x => x.Id); var list = uow.Session.QueryOver <DeliveryPoint>(() => mainPointAlias) .WithSubquery.WhereExists(dublicateSubquery) .Fetch(x => x.Counterparty).Eager .OrderBy(x => x.Counterparty).Asc .ThenBy(x => x.Latitude).Asc .ThenBy(x => x.Longitude).Asc .List(); progressOp.Adjustment.Upper = list.Count + 3; progressOp.Text = "Обрабатываем адреса..."; progressOp.Adjustment.Value++; QSMain.WaitRedraw(); Duplicates = new List <DublicateNode>(); DublicateNode lastDuplicate = null; foreach (var dp in list) { if (lastDuplicate == null || !lastDuplicate.Compare(dp)) { lastDuplicate = new DublicateNode(); Duplicates.Add(lastDuplicate); } lastDuplicate.Addresses.Add(new AddressNode(lastDuplicate, dp)); progressOp.Adjustment.Value++; QSMain.WaitRedraw(); } Duplicates.ForEach(x => x.FineMain()); progressOp.Adjustment.Value++; QSMain.WaitRedraw(); Duplicates = Duplicates.OrderBy(x => x.CounterParty).ThenBy(x => x.FirstAddress1c).ToList(); progressOp.Adjustment.Value++; QSMain.WaitRedraw(); ObservableDuplicates = new GenericObservableList <DublicateNode>(Duplicates); ytreeviewDuplicates.SetItemsSource(ObservableDuplicates); progressOp.Visible = false; }
public AddressNode(DublicateNode dupNode, DeliveryPoint dp) { Address = dp; myDuplicateNode = dupNode; }