예제 #1
0
        /// <summary>
        /// 指定されたテーブルからすべてのレコードを非同期的に取得します。
        /// </summary>
        /// <typeparam name="T">テーブルにマッピングされた型</typeparam>
        /// <param name="properties">取得対象の列</param>
        /// <returns>取得したレコード</returns>
        public virtual async Task <IReadOnlyList <T> > SelectAsync <T>(Expression <Func <T, object> > properties)
        {
            var sql    = PrimitiveSql.CreateSelect(properties);
            var result = await this.Connection.QueryAsync <T>(sql, null, this.Transaction, this.Timeout).ConfigureAwait(false);

            return(result as IReadOnlyList <T>);
        }
        public static async Task <IReadOnlyList <T> > SelectAsync <T>(this IDbConnection connection, Expression <Func <T, bool> > predicate, params Expression <Func <T, object> >[] properties)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (predicate == null)
            {
                throw new ArgumentNullException(nameof(predicate));
            }
            if (properties == null)
            {
                throw new ArgumentNullException(nameof(properties));
            }

            var select = PrimitiveSql.CreateSelect(properties);

            var where = PredicateSql.From(connection.GetDbKind(), predicate);
            var builder = new StringBuilder();

            builder.AppendLine(select);
            builder.AppendLine(nameof(where));
            builder.Append($"    {where.Statement}");
            var result = await connection.QueryAsync <T>(builder.ToString(), where.Parameter).ConfigureAwait(false);

            return(result as IReadOnlyList <T>);
        }
예제 #3
0
        /// <summary>
        /// 指定されたテーブルから指定の条件に一致するレコードを取得します。
        /// </summary>
        /// <typeparam name="T">テーブルにマッピングされた型</typeparam>
        /// <param name="predicate">抽出条件</param>
        /// <param name="properties">取得対象の列</param>
        /// <returns>取得したレコード</returns>
        public virtual IReadOnlyList <T> Select <T>(Expression <Func <T, bool> > predicate, Expression <Func <T, object> > properties)
        {
            var select = PrimitiveSql.CreateSelect(properties);

            var where = PredicateSql.From(this.DbKind, predicate);
            var builder = new StringBuilder();

            builder.AppendLine(select);
            builder.AppendLine(nameof(where));
            builder.Append($"    {where.Statement}");
            return(this.Connection.Query <T>(builder.ToString(), where.Parameter, this.Transaction, true, this.Timeout) as IReadOnlyList <T>);
        }
예제 #4
0
        public void 特定1列のSelect文生成()
        {
            var actual1 = PrimitiveSql.CreateSelect(typeof(Person), "Name");
            var actual2 = PrimitiveSql.CreateSelect <Person>(x => x.Name);
            var actual3 = PrimitiveSql.CreateSelect <Person>(x => new { x.Name });
            var expect  =
                @"select
    名前 as Name
from dbo.Person";

            actual1.Is(expect);
            actual2.Is(expect);
            actual3.Is(expect);
        }
예제 #5
0
        public void 全列のSelect文生成()
        {
            var actual1 = PrimitiveSql.CreateSelect(typeof(Person));
            var actual2 = PrimitiveSql.CreateSelect <Person>();
            var expect  =
                @"select
    Id as Id,
    名前 as Name,
    Age as Age,
    HasChildren as HasChildren
from dbo.Person";

            actual1.Is(expect);
            actual2.Is(expect);
        }
        public static IReadOnlyList <T> Select <T>(this IDbConnection connection, params Expression <Func <T, object> >[] properties)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (properties == null)
            {
                throw new ArgumentNullException(nameof(properties));
            }

            var sql = PrimitiveSql.CreateSelect(properties);

            return(connection.Query <T>(sql) as IReadOnlyList <T>);
        }
        public static async Task <IReadOnlyList <T> > SelectAsync <T>(this IDbConnection connection, params Expression <Func <T, object> >[] properties)
        {
            if (connection == null)
            {
                throw new ArgumentNullException(nameof(connection));
            }
            if (properties == null)
            {
                throw new ArgumentNullException(nameof(properties));
            }

            var sql    = PrimitiveSql.CreateSelect(properties);
            var result = await connection.QueryAsync <T>(sql).ConfigureAwait(false);

            return(result as IReadOnlyList <T>);
        }
예제 #8
0
        /// <summary>
        /// 指定されたテーブルからすべてのレコードを取得します。
        /// </summary>
        /// <typeparam name="T">テーブルにマッピングされた型</typeparam>
        /// <param name="properties">取得対象の列</param>
        /// <returns>取得したレコード</returns>
        public virtual IReadOnlyList <T> Select <T>(Expression <Func <T, object> > properties)
        {
            var sql = PrimitiveSql.CreateSelect(properties);

            return(this.Connection.Query <T>(sql, null, this.Transaction, true, this.Timeout) as IReadOnlyList <T>);
        }