private static Coverage MergeWith(Coverage first, Coverage second) { if (first.Contains(second)) { return(first); } if (second.Contains(first)) { return(second); } // this is not exactly right but let's leave it as is at the moment var bestPath = first.BestPath .Concat(second.BestPath) .OrderBy(_ => _.TrackMatchAt) .Select((matched, index) => new MatchedWith(matched.TrackSequenceNumber, matched.TrackMatchAt, matched.TrackSequenceNumber, matched.TrackMatchAt, matched.Score)); return(new Coverage(bestPath, CalculateNewQueryLength(first, second), first.TrackLength, first.FingerprintLength, first.PermittedGap)); }