public static TModel ToSingle <TModel>(
            this IQueryable <TModel> queryable,
            SingleReadMode mode = default)
        {
            switch (mode)
            {
            case SingleReadMode.Single:
                return(queryable.SingleOrDefault());

            case SingleReadMode.First:
                return(queryable.FirstOrDefault());

            case SingleReadMode.Last:
                return(queryable.LastOrDefault());

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
        }
        public static Task <TModel> ToSingleAsync <TModel>(
            this IQueryable <TModel> queryable,
            SingleReadMode mode = default,
            CancellationToken cancellationToken = default)
        {
            switch (mode)
            {
            case SingleReadMode.Single:
                return(queryable.SingleOrDefaultAsync(cancellationToken));

            case SingleReadMode.First:
                return(queryable.FirstOrDefaultAsync(cancellationToken));

            case SingleReadMode.Last:
                return(queryable.LastOrDefaultAsync(cancellationToken));

            default:
                throw new ArgumentOutOfRangeException(nameof(mode), mode, null);
            }
        }