Example #1
0
        public static void SimpleRun()
        {
            var repository = new Repository <CustomerFare>();

            var groupedCustomerFares = repository.ItemsAdded
                                       .GroupBy(customerFare => (customerFare.Id, customerFare.DateTime.Date))
                                       .Select(customerFareGroup =>
                                               customerFareGroup.Scan(
                                                   (Group: customerFareGroup.Key, CustomerFares: new List <CustomerFare>()),
                                                   (state, customerFare) =>
            {
                state.CustomerFares.Add(customerFare);
                return(state.Group, state.CustomerFares);
            }))
                                       .Merge();

            var subscription = groupedCustomerFares
                               .Subscribe(customerFareGroup =>
            {
                var group = customerFareGroup.Group;

                var customerId = group.Id;
                var groupDate  = group.Date;

                Console.WriteLine(
                    $"Group: <{customerId}::{groupDate.Day}-{groupDate.Month}-{groupDate.Year}>, Fares: ");
                foreach (var customerFare in customerFareGroup.CustomerFares)
                {
                    var date = customerFare.DateTime;
                    Console.Write($"\t<{customerFare.Id}::{date.Day}_{date.Month}_{date.Year} {date.Hour}_{date.Minute}_{date.Hour}::{customerFare.Fare}>, ");
                }
                Console.WriteLine();
            });

            DateTime[] dates = new DateTime[]
            {
                new DateTime(2020, 12, 07),
                new DateTime(2020, 12, 08),
                new DateTime(2020, 12, 09),
                new DateTime(2020, 12, 10)
            };

            int[] ids = new int[] { 1, 2 };

            for (int i = 0; i < 15; i++)
            {
                var date = dates[i % dates.Length];
                var dateWithDifferentTime = new DateTime(date.Year, date.Month, date.Day, 10, i, 10);

                var id = ids[i % ids.Length];

                var customerFare = new CustomerFare(id, dateWithDifferentTime, i * 100);

                repository.Add(customerFare);
            }

            subscription.Dispose();
        }
Example #2
0
        public static void MaxTotalRun()
        {
            var repository = new Repository <CustomerFare>();

            var groupedCustomerFares = repository.ItemsAdded
                                       .GroupBy(customerFare => (customerFare.Id, customerFare.DateTime.Date))
                                       .Select(customerFareGroup =>
                                               customerFareGroup.Scan(
                                                   (Group: customerFareGroup.Key, Total: 0m, Max: 0m, CustomerFare: (CustomerFare)null),
                                                   (state, customerFare) =>
            {
                return(state.Group, state.Total + customerFare.Fare, Math.Max(state.Max, customerFare.Fare), customerFare);
            }))
                                       .Merge();

            var subscription = groupedCustomerFares
                               .Subscribe(customerFareGroup =>
            {
                var group = customerFareGroup.Group;

                var customerId = group.Id;
                var groupDate  = group.Date;

                var customerFare = customerFareGroup.CustomerFare;
                var fareId       = customerFare.Id;
                var rideDate     = customerFare.DateTime;
                var fare         = customerFare.Fare;

                Console.Write($"Group: [{customerId}::{groupDate.Day}-{groupDate.Month}-{groupDate.Year}], ");
                Console.Write($"Total: <{customerFareGroup.Total}>, Max: <{customerFareGroup.Max}>, ");
                Console.WriteLine($"Item: [{fareId}]:<{rideDate.Day}-{rideDate.Month}-{rideDate.Year}>, Fare: {fare}");
            });

            DateTime[] dates = new DateTime[]
            {
                new DateTime(2020, 12, 07),
                new DateTime(2020, 12, 08),
                new DateTime(2020, 12, 09),
                new DateTime(2020, 12, 10)
            };

            int[] ids = new int[] { 1, 2 };

            for (int i = 0; i < 15; i++)
            {
                var date = dates[i % dates.Length];
                var dateWithDifferentTime = new DateTime(date.Year, date.Month, date.Day, 10, i, 10);

                var id = ids[i % ids.Length];

                var customerFare = new CustomerFare(id, dateWithDifferentTime, i * 100);

                repository.Add(customerFare);
            }

            subscription.Dispose();
        }