示例#1
0
        /// <summary>
        /// 执行查询,并返回单个对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="queryModel"></param>
        /// <param name="returnDefaultWhenEmpty"></param>
        /// <returns></returns>
        public T ExecuteSingle <T>(QueryModel queryModel, bool returnDefaultWhenEmpty = true)
        {
            SqlServerQueryModelVisitor queryModelVisitor = new SqlServerQueryModelVisitor(_tblName);

            var command = queryModelVisitor.Translate(queryModel);


            using (IDataReader reader = this.provider.ExecuteQueryReader(command.ToString(), command.PrepareParameter().ToArray()))
            {
                bool isExists = reader.Read();

                // 如果不存在查询记录
                if (isExists == false)
                {
                    // 如果可以默认
                    if (returnDefaultWhenEmpty)
                    {
                        return(default(T));
                    }
                    else
                    {
                        throw new InvalidOperationException("未查询出满足条件的任何记录。");
                    }
                }

                var tuple = reader.GetDeserializerState <T>();
                return((T)tuple.Func(reader));
            }
        }
示例#2
0
        /// <summary>
        /// 执行查询,并返回第一行第一列
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="queryModel"></param>
        /// <returns></returns>
        public T ExecuteScalar <T>(QueryModel queryModel)
        {
            var queryModelVisitor = new SqlServerQueryModelVisitor(_tblName);

            var command = queryModelVisitor.Translate(queryModel);

            return(provider.GetResult <T>(command.ToString(), command.PrepareParameter().ToArray()));
        }
示例#3
0
        /// <summary>
        ///  执行查询,并返回 IEnumerable<T> 对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="queryModel"></param>
        /// <returns></returns>
        public IEnumerable <T> ExecuteCollection <T>(QueryModel queryModel)
        {
            SqlServerQueryModelVisitor queryModelVisitor = new SqlServerQueryModelVisitor(_tblName);

            var command = queryModelVisitor.Translate(queryModel);

            using (IDataReader reader = this.provider.ExecuteQueryReader(command.ToString(), command.PrepareParameter().ToArray()))
            {
                using (reader)
                {
                    var tuple = reader.GetDeserializerState <T>();
                    while (reader.Read())
                    {
                        yield return((T)tuple.Func(reader));
                    }
                }
            }
        }