/// <summary>
        ///     Gets a single result from the reader.
        /// </summary>
        public static TEntity Single <TEntity, TKey>(this ILinqReader <TEntity, TKey> reader)
            where TEntity : class
        {
            Guard.ArgumentNotNull(reader, nameof(reader));

            return(reader.Single(_ => true));
        }
        /// <summary>
        ///     Gets the first element in a given reader.
        /// </summary>
        public static T First <T, K>(this ILinqReader <T, K> reader)
            where T : class
        {
            Guard.ArgumentNotNull(reader, nameof(reader));

            return(reader.First(_ => true));
        }
        /// <summary>
        ///     Gets a single result from a linq reader.
        /// </summary>
        public static TEntity Single <TEntity, TKey>(this ILinqReader <TEntity, TKey> reader,
                                                     Expression <Func <TEntity, bool> > predicate)
            where TEntity : class
        {
            Guard.ArgumentNotNull(reader, nameof(reader));
            Guard.ArgumentNotNull(predicate, nameof(predicate));

            var item = reader.SingleOrDefault(predicate);

            if (item == null)
            {
                throw new InvalidOperationException("No element satisfies the condition in predicate.");
            }

            return(item);
        }
        protected void GivenALinqReaderWithData()
        {
            var repo = new InMemoryRepository <TestEntity, Guid>();

            _reader = repo;

            // insert
            repo.Insert(new TestEntity
            {
                Id   = Guid.NewGuid(),
                Name = "Name"
            });

            repo.Insert(new TestEntity
            {
                Id   = Guid.NewGuid(),
                Name = "Name 2"
            });
        }