public IEnumerable<IStreamQueryPartition<Guid>> Build( Guid lowerBoundExclusive, Guid upperBoundInclusive, int numberOfPartitions) { var upperBigIntInclusive = upperBoundInclusive.ToBigInteger(); var lowerBigIntExclusive = lowerBoundExclusive.ToBigInteger(); var space = upperBigIntInclusive - lowerBigIntExclusive; foreach (var i in Enumerable.Range(0, numberOfPartitions)) { var lower = lowerBigIntExclusive + (i*(space/numberOfPartitions)); var upper = lowerBigIntExclusive + ((i + 1)*(space/numberOfPartitions)); if (i == numberOfPartitions - 1) { upper = upperBigIntInclusive; } yield return new StreamQueryPartition<Guid> { LowerBoundExclusive = lower.ToGuid(), UpperBoundInclusive = upper.ToGuid() }; } }
private static void TestGuidRoundTrip(Guid guid) { Console.WriteLine(guid); guid.ToBigInteger().ToGuid().Should().Be(guid); }