//  x:\jsc.svn\core\scriptcorelib.extensions\scriptcorelib.extensions\query\experimental\queryexpressionbuilder.sum.cs

        public static Task <long> SumAsync(this IQueryStrategy <long> source)
        {
            Console.WriteLine("enter SumAsync");
            // tested by
            // X:\jsc.svn\examples\javascript\LINQ\test\auto\TestSelect\TestWebSumLong\Application.cs


            var z = new TaskCompletionSource <long>();

            //QueryExpressionBuilder.WithConnectionAsync(
            QueryExpressionBuilder.WithConnection(
                async cc =>
            {
                Console.WriteLine("enter WithConnection SumAsync");

                var xDbCommand = QueryExpressionBuilder.GetScalarCommand(
                    source,
                    cc: cc,
                    Operand: QueryExpressionBuilder.xReferencesOfLong.SumOfLongReference.Method
                    );

                Console.WriteLine("enter WithConnection SumAsync before ExecuteScalarAsync");
                // will WithConnection actually wait or terminate?
                // never returns?
                var __value = await xDbCommand.ExecuteScalarAsync();

                Console.WriteLine("enter WithConnection SumAsync after ExecuteScalarAsync " + new { __value });

                z.SetResult(
                    (long)__value
                    );
            }
                );

            return(z.Task);
        }
        // X:\jsc.svn\core\ScriptCoreLib.Async\ScriptCoreLib.Async\Query\Experimental\QueryExpressionBuilderAsync.SumAsync.cs

        public static long Sum(this IQueryStrategy <long> source)
        {
            var value = default(long);

            // tested by
            // X:\jsc.svn\examples\javascript\LINQ\test\auto\TestSelect\TestSQLiteCLRSumLong\Program.cs

            QueryExpressionBuilder.WithConnection(
                cc =>
            {
                var xDbCommand = QueryExpressionBuilder.GetScalarCommand(
                    source,
                    cc: cc,
                    Operand: QueryExpressionBuilder.xReferencesOfLong.SumOfLongReference.Method
                    );

                var __value = xDbCommand.ExecuteScalar();

                value = (long)__value;
            }
                );

            return(value);
        }