コード例 #1
0
        private IQueryableCommand <T> GetQuery(IDatabaseDriver driver, IMapper mapper)
        {
            if (query == null)
            {
                if (fetches == null)
                {
                    query = FluentBaseBuilder <T, FolkeTuple <object> > .Select(driver, mapper).All().From().Where((x, y) => x.Key().Equals(y.Item0));
                }
                else
                {
                    var selectQuery = FluentBaseBuilder <T, FolkeTuple <object> > .Select(driver, mapper).All();

                    foreach (var fetch in fetches)
                    {
                        selectQuery.All(fetch);
                    }

                    var fromQuery = selectQuery.From();
                    foreach (var fetch in fetches)
                    {
                        fromQuery.LeftJoinOnId(fetch);
                    }

                    fromQuery.Where((x, y) => x.Key().Equals(y.Item0));
                    query = fromQuery;
                }
            }

            return(query);
        }
コード例 #2
0
        public IQueryableCommand <T> Build(IFolkeConnection connection)
        {
            if (query == null)
            {
                var select = FluentBaseBuilder <T, FolkeTuple> .Select(connection.Driver, connection.Mapper);

                query = prepare.Invoke(select);
            }
            return(query.Build(connection));
        }
コード例 #3
0
 internal static IEnumerable <T> Enumerate <T>(this IQueryableCommand <T> queryable)
 {
     using (var command = queryable.Connection.CreateCommand(queryable.Sql, queryable.Parameters))
     {
         using (var reader = command.ExecuteReader())
         {
             while (reader.Read())
             {
                 yield return((T)queryable.MappedClass.Read(queryable.Connection, typeof(T), reader));
             }
         }
     }
 }
コード例 #4
0
 public static object Scalar(this IQueryableCommand baseQueryBuilder)
 {
     using (var command = baseQueryBuilder.CreateCommand())
     {
         using (var reader = command.ExecuteReader())
         {
             if (!reader.Read() || reader.IsDBNull(0))
             {
                 return(null);
             }
             return(reader.GetValue(0));
         }
     }
 }
コード例 #5
0
 public static async Task <object> ScalarAsync(this IQueryableCommand baseQueryBuilder)
 {
     using (var command = baseQueryBuilder.Connection.CreateCommand(baseQueryBuilder.Sql, baseQueryBuilder.Parameters))
     {
         using (var reader = await command.ExecuteReaderAsync())
         {
             if (!reader.Read() || reader.IsDBNull(0))
             {
                 return(null);
             }
             return(reader.GetValue(0));
         }
     }
 }
コード例 #6
0
 public static async Task <TU> ScalarAsync <TU>(this IQueryableCommand baseQueryBuilder)
 {
     using (var command = baseQueryBuilder.CreateCommand())
     {
         using (var reader = await command.ExecuteReaderAsync())
         {
             if (!reader.Read() || reader.IsDBNull(0))
             {
                 return(default(TU));
             }
             var ret = baseQueryBuilder.Connection.Driver.ConvertReaderValueToValue(reader, typeof(TU), 0);
             return((TU)ret);
         }
     }
 }
コード例 #7
0
 public static async Task <T> FirstOrDefaultAsync <T>(this IQueryableCommand <T> baseQueryBuilder)
 {
     using (var command = baseQueryBuilder.Connection.CreateCommand(baseQueryBuilder.Sql, baseQueryBuilder.Parameters))
     {
         using (var reader = command.ExecuteReader())
         {
             if (!await reader.ReadAsync())
             {
                 return(default(T));
             }
             var value = baseQueryBuilder.MappedClass.Read(baseQueryBuilder.Connection, typeof(T), reader);
             return((T)value);
         }
     }
 }
コード例 #8
0
 /// <summary>
 /// Gets the first result asynchronously.
 /// Throws an exception if there is no result.
 /// </summary>
 /// <returns></returns>
 public static async Task <T> FirstAsync <T>(this IQueryableCommand <T> baseQueryBuilder)
 {
     using (var command = baseQueryBuilder.Connection.CreateCommand(baseQueryBuilder.Sql, baseQueryBuilder.Parameters))
     {
         using (var reader = command.ExecuteReader())
         {
             if (!await reader.ReadAsync())
             {
                 throw new InvalidOperationException("No result found");
             }
             var value = baseQueryBuilder.MappedClass.Read(baseQueryBuilder.Connection, typeof(T), reader);
             return((T)value);
         }
     }
 }
コード例 #9
0
 public static IList <T> ToList <T>(this IQueryableCommand <T> queryableCommand)
 {
     using (var command = queryableCommand.Connection.CreateCommand(queryableCommand.Sql, queryableCommand.Parameters))
     {
         using (var reader = command.ExecuteReader())
         {
             var ret = new List <T>();
             while (reader.Read())
             {
                 var value = queryableCommand.MappedClass.Read(queryableCommand.Connection, typeof(T), reader);
                 ret.Add((T)value);
             }
             return(ret);
         }
     }
 }
コード例 #10
0
 public static async Task <IList <T> > ToListAsync <T>(this IQueryableCommand <T> baseQueryBuilder)
 {
     using (var command = baseQueryBuilder.Connection.CreateCommand(baseQueryBuilder.Sql, baseQueryBuilder.Parameters))
     {
         using (var reader = await command.ExecuteReaderAsync())
         {
             var ret = new List <T>();
             while (reader.Read())
             {
                 var value = baseQueryBuilder.MappedClass.Read(baseQueryBuilder.Connection, typeof(T), reader);
                 ret.Add((T)value);
             }
             return(ret);
         }
     }
 }
コード例 #11
0
 public static async Task <T> SingleOrDefaultAsync <T>(this IQueryableCommand <T> baseQueryBuilder)
 {
     using (var command = baseQueryBuilder.Connection.CreateCommand(baseQueryBuilder.Sql, baseQueryBuilder.Parameters))
     {
         using (var reader = await command.ExecuteReaderAsync())
         {
             if (!reader.Read())
             {
                 return(default(T));
             }
             var value = baseQueryBuilder.MappedClass.Read(baseQueryBuilder.Connection, typeof(T), reader);
             if (reader.Read())
             {
                 throw new InvalidOperationException("Not single");
             }
             return((T)value);
         }
     }
 }
コード例 #12
0
 public static IQueryableCommand <T> Build <T>(this IQueryableCommand <T> baseQueryBuilder,
                                               IFolkeConnection connection, params object[] parameters)
 {
     return(new QueryableCommand <T>(connection, baseQueryBuilder.MappedClass, baseQueryBuilder.Sql, parameters));
 }
コード例 #13
0
 public static IFolkeCommand CreateCommand(this IQueryableCommand queryableCommand)
 {
     return(queryableCommand.Connection.CreateCommand(queryableCommand.Sql, queryableCommand.Parameters));
 }