public void RemoveMeasurementsByTrip(Model.Imports.Trip trip) { var trees = Registry.Session.CreateCriteria <Tree>() .CreateAlias("Measurements", "measurement") .CreateAlias("measurement.ImportingTrip", "importingTrip") .Add(Restrictions.Eq("importingTrip.Id", trip.Id)) .List <Tree>(); foreach (var tree in trees) { // evaluate where clause immediately by calling ToList() to avoid modification of collection during enumeration foreach (var measurementToRemove in tree.Measurements.Where(measurement => measurement.ImportingTrip.Equals(trip)).ToList()) { tree.RemoveMeasurement(measurementToRemove); } if (tree.Measurements.Count < 1) { Registry.Session.Delete(tree); } } }
public void RemoveVisitsByTrip(Model.Imports.Trip trip) { var sites = Registry.Session.CreateCriteria <Site>() .CreateAlias("Visits", "visit") .CreateAlias("visit.ImportingTrip", "importingTrip") .Add(Restrictions.Eq("importingTrip.Id", trip.Id)) .List <Site>(); foreach (var site in sites) { foreach (var visitToRemove in site.Visits .Where(v => v.ImportingTrip.Equals(trip)) .ToArray()) { site.RemoveVisit(visitToRemove); } if (site.Visits.Count < 1) { Registry.Session.Delete(site); } } }