Exemple #1
0
        /// <summary>
        /// Gets one object, selected by id and an optional predicate
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="db"></param>
        /// <param name="id"></param>
        /// <param name="additionalPredicate"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static T Get <T>(this IAccessDb db, object id, string additionalPredicate = null, params object[] args)
        {
            id.MustNotBeNull("id");
            var tp = typeof(T);

            if (typeof(ExpandoObject) == tp || typeof(object) == tp)
            {
                throw new InvalidOperationException("Can't work with System.Object or dynamic types");
            }
            var ti = TableInfo.ForType(tp);

            if (ti.SelectSingleSql == null)
            {
                var sb = new StringBuilder("select ");
                var p  = tp.GetProperties().Where(pr => !pr.PropertyType.IsCustomObjectType()).Select(pr => pr.Name);
                foreach (var name in p)
                {
                    sb.AppendFormat("{0},", db.Provider.EscapeName(name));
                }
                sb.Remove(sb.Length - 1, 1);

                sb.AppendFormat(" from {0}", db.Provider.EscapeName(ti.Name));
                sb.AppendFormat(" where {0}=@0", db.Provider.EscapeName(ti.PrimaryKey));
                if (!string.IsNullOrEmpty(additionalPredicate))
                {
                    sb.AppendFormat(" and {0}", additionalPredicate);
                }
                ti.SelectSingleSql = sb.ToString();
            }
            var fargs = new List <object>(args.Length + 1);

            fargs.Add(id);
            fargs.AddRange(args);
            return(db.FirstOrDefault <T>(ti.SelectSingleSql, fargs.ToArray()));
        }
Exemple #2
0
        /// <summary>
        /// Selects first row matching criteria and maps it to poco
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="db"></param>
        /// <param name="condition"></param>
        /// <returns></returns>
        public static T Get <T>(this IAccessDb db, Expression <Func <T, bool> > condition)
        {
            var builder = new ExpressionSqlBuilder <T>(db.Provider.BuilderHelper);

            builder
            .WriteSelect()
            .WriteSelectAllColumns()
            .WriteFrom()
            .Where(condition);
            return(db.FirstOrDefault <T>(builder.ToString(), builder.Parameters.ToArray()));
        }