public async Task <Tuple <int, List <Todo> > > FetchMany(int page = 1, int pageSize = 5, TodoShow show = TodoShow.All) { using (var session = _sessionFactoryBuilder.GetSessionFactory().OpenSession()) { var offset = (page - 1) * pageSize; IQueryable <Todo> queryable = null; if (show == TodoShow.Completed) { queryable = session.Query <Todo>().Where(t => t.Completed); } else if (show == TodoShow.Pending) { queryable = session.Query <Todo>().Where(t => !t.Completed); } int totalCount; List <Todo> todos; if (queryable != null) { totalCount = await queryable.CountAsync(); todos = await queryable.Skip(offset).Take(pageSize).Select(t => new Todo { Id = t.Id, Title = t.Title, Completed = t.Completed, CreatedAt = t.CreatedAt, UpdatedAt = t.UpdatedAt }).ToListAsync(); } else { totalCount = await session.Query <Todo>().CountAsync(); todos = await session.Query <Todo>().Skip(offset).Take(pageSize).Select(t => new Todo { Id = t.Id, Title = t.Title, Completed = t.Completed, CreatedAt = t.CreatedAt, UpdatedAt = t.UpdatedAt }).ToListAsync(); } return(Tuple.Create(totalCount, todos)); } }
public async Task <List <Todo> > FetchMany(TodoShow show = TodoShow.All) { using (var session = _sessionFactoryBuilder.GetSessionFactory().OpenSession()) { IQueryable <Todo> queryable = null; if (show == TodoShow.Completed) { queryable = session.Query <Todo>().Where(t => t.Completed); } else if (show == TodoShow.Pending) { queryable = session.Query <Todo>().Where(t => !t.Completed); } List <Todo> todos; if (queryable != null) { todos = await queryable.Select(t => new Todo { Id = t.Id, Title = t.Title, Completed = t.Completed, CreatedAt = t.CreatedAt, UpdatedAt = t.UpdatedAt }).ToListAsync(); } else { todos = await session.Query <Todo>().Select(t => new Todo { Id = t.Id, Title = t.Title, Completed = t.Completed, CreatedAt = t.CreatedAt, UpdatedAt = t.UpdatedAt }).ToListAsync(); } return(todos); } }
public async Task <List <Todo> > FetchMany(TodoShow show = TodoShow.All) { using (var session = _sessionFactoryBuilder.GetSessionFactory().OpenSession()) { // Retrieve hwo many articles with our criteria(All, Completed or Pending) IQueryable <Todo> queryable = session.Query <Todo>().OrderBy(t => t.CreatedAt); if (show == TodoShow.Completed) { queryable = queryable.Where(t => t.Completed); } else if (show == TodoShow.Pending) { queryable = queryable.Where(t => !t.Completed); } List <Todo> todos; if (show != TodoShow.All) { // https://stackoverflow.com/questions/5325797/the-entity-cannot-be-constructed-in-a-linq-to-entities-query // for complete/pending todos = await queryable .Select(t => new Todo { Id = t.Id, Title = t.Title, Completed = t.Completed, CreatedAt = t.CreatedAt, UpdatedAt = t.UpdatedAt }) .ToListAsync(); } else { todos = await queryable.ToListAsync(); } return(todos); } }
private static async Task SeedTodos(ISessionFactoryBuilder sessionFactoryBuilder) { using (var session = sessionFactoryBuilder.GetSessionFactory().OpenSession()) { using (var transaction = session.BeginTransaction()) { var todosCount = await session.Query <Todo>().CountAsync(); var todosToSeed = 32; todosToSeed -= todosCount; if (todosToSeed > 0) { Console.WriteLine($"[+] Seeding {todosToSeed} Todos"); var faker = new Faker <Todo>() .RuleFor(a => a.Title, f => string.Join(" ", f.Lorem.Words(f.Random.Int(2, 5)))) .RuleFor(a => a.Description, f => f.Lorem.Sentences(f.Random.Int(1, 10))) .RuleFor(t => t.Completed, f => f.Random.Bool(0.4f)) .RuleFor(a => a.CreatedAt, f => f.Date.Between(DateTime.Now.AddYears(-5), DateTime.Now.AddDays(-1))) .FinishWith((f, todoInstance) => { todoInstance.UpdatedAt = f.Date.Between(todoInstance.CreatedAt.Value, DateTime.Now); }); var todos = faker.Generate(todosToSeed); foreach (var todo in todos) { await session.SaveAsync(todo); } await transaction.CommitAsync(); } } } }