public IActionResult Details3(int?id) { _creatableStorage.Value.Create(new Log { Date = DateTime.Now, Message = "Entrou em Student/Details3" }); if (id == null) { return(NotFound()); } var student = _readerStore.AsFluentQuery() .Projection() .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .Find(id); if (student == null) { return(NotFound()); } var createdStudent = _writerStore.Create(new Student { FirstMidName = student.FirstMidName + " (copy)", LastName = student.LastName, EnrollmentDate = student.EnrollmentDate }); _logger.LogDebug($"Novo estudante criado com ID: {createdStudent.ID}"); var allCoursesTests = _storeCourseTest.AsFluentQuery() .GetAll(); foreach (var courseTest in allCoursesTests) { var reload = _storeCourseTest.Find(courseTest.Identifiers); _logger.LogDebug($"CourseTest {{ CourseID: {reload.CourseID}, CourseGUID: {reload.CourseGUID} }}"); } var allCoursesTests2 = new RawSqlRideRepository <CourseTest>(_context, "SELECT * FROM course_test") .AsFluentQuery() .GetAll(); foreach (var courseTest in allCoursesTests) { var reload = _storeCourseTest.Find(courseTest.Identifiers); _logger.LogDebug($"CourseTest {{ CourseID: {reload.CourseID}, CourseGUID: {reload.CourseGUID} }}"); } var allCoursesTests3 = _acquirableStorage.GetAll(); var allCoursesTests4 = _acquirableStorage2.GetAll(); throw new NotImplementedException("Isso deve gerar um IUnitOfWork.DiscardWork()"); }
public IActionResult Search(string searchString, string button, uint?page) { _creatableStorage.Value.Create(new Log { Date = DateTime.Now, Message = "Entrou em Student/Search" }); uint pageOffset = Convert.ToUInt32(page.HasValue ? page.Value - 1 : 0); var query = _readerStore.AsFluentQuery() .Paginate(page ?? 1, 5); PaginatedResult <Student> students = !string.IsNullOrWhiteSpace(searchString) ? query .Filter(f => f.FirstMidName.ToLower().Contains(searchString.ToLower()) || f.LastName.ToLower().Contains(searchString.ToLower())) .LimitedSearch() : query.LimitedGet(); ViewData["SearchString"] = searchString; // Caso o botão clicado seja "FiltrarAtualizar" nós // atualizamos o último nome de cada estudante encontrado // com o nome fake composto por um número aleatório, só // pra demonstrar o uso de Update() em massa if (!string.IsNullOrWhiteSpace(searchString) && button == "FiltrarAtualizar") { Expression <Func <Student, bool> > filterExpression = f => f.FirstMidName.ToLower().Contains(searchString.ToLower()) || f.LastName.ToLower().Contains(searchString.ToLower()); var filter = new DataFilter <Student>() .AddFilter(filterExpression); // Todos com mesmo segundo nome var random = new Random(); // Alterando só um var first = students.Result.FirstOrDefault(); if (first != null) { var updated1 = _writerStore.AsFluentWriter() .Identifier(first.ID) .Update(new { LastName = $"LastName ({random.Next()})" }); var updated2 = _writerStore.AsFluentWriter() .Identifier(first.ID) .Update(c => new { LastName = $"{c.LastName} ({random.Next()})" }); } // Alterando a coleção inteira var updatedResult1 = _bulkWriterStore.AsFluentBulkWriter() .Filter(filterExpression) .BulkUpdate(new { LastName = $"LastName {random.Next()}" }); // Cada um com seu próprio segundo nome var updatedResult2 = _bulkWriterStore.AsFluentBulkWriter() .Filter(filterExpression) .BulkUpdate(c => new { LastName = $"{c.LastName} ({random.Next()})" }); students = new PaginatedResult <Student>( result: updatedResult2, offset: students.Offset, limit: students.Limit, total: students.Total ); } return(View(nameof(Index), students)); }
public IActionResult Index() { var lazyStore = _studentStoreLoader.Value; var logs = _bulkCreatableStorage.BulkCreate(new[] { new Log { Date = DateTime.Now, Message = "Entrou na home 1" }, new Log { Date = DateTime.Now, Message = "Entrou na home 2" } }); // Equivalentes para GetAll() com GroupBy() var projection = new DataProjection <Student, int, object>( s => s.EnrollmentDate.Year, g => new { Ano = g.Key, Total = g.Count(), MaiorData = g.Max(c => c.EnrollmentDate), MenorData = g.Min(c => c.EnrollmentDate) }); var result = lazyStore.GetAll(projection); var resultList = result.ToList(); var result2 = lazyStore.AsFluentQuery() .Projection() .GroupAndMap(s => s.EnrollmentDate.Year, g => new { Ano = g.Key, Total = g.Count(), MaiorData = g.Max(c => c.EnrollmentDate), MenorData = g.Min(c => c.EnrollmentDate) }) .Project() .GetAll(); var resultList2 = result2.ToList(); // Equivalentes para GetAll() var a1 = lazyStore.GetAll(); var a2 = lazyStore.GetAll(new DataIncludes <Student>()); var a3 = lazyStore.AsFluentQuery().GetAll(); // Equivalentes para GetAll() com Include() e Select() var a4Projection = new DataProjection <Student, object>(s => new { StudentName = s.FirstMidName }); var a4 = lazyStore.GetAll(a4Projection); var a5 = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Project() .GetAll(); var a6 = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Map(m => new { StudentName = m.FirstMidName, TotalEnrollments = m.Enrollments.Count }) .Project() .GetAll(); // Equivalentes para Find() var b1 = lazyStore.Find(2, new DataIncludes <Student>()); var b2 = lazyStore.Find(2, null); var b3 = lazyStore.Find(2); var b4 = lazyStore.AsFluentQuery().Find(2); var bb01 = _findableStorage.Find(2, new DataIncludes <Student>()); var bb02 = _findableStorage.Find(2, null); var bb03 = _findableStorage.Find(2); var bb04 = _findableStorage.Find(new object[] { 2 }); var bb05 = _findableStorage.Find(new Student { ID = 2 }); var bb11 = _findableStorage2.Find(2, new DataIncludes <Student>()); var bb12 = _findableStorage2.Find(2, null); var bb13 = _findableStorage2.Find(2); var bb14 = _findableStorage2.Find(new object[] { 2 }); var bb15 = _findableStorage2.Find(new Student { ID = 2 }); // Equivalentes para Find() com Include() e Select() var c1 = _enrollmentStore.AsFluentQuery() .Projection() .Include(i => i.Student) .Include(i => i.Course) .Project() .Find(2); var c2 = _enrollmentStore.AsFluentQuery() .Projection() .Include(i => i.Student) .Include(i => i.Course) .Map(m => new { Student = m.Student.FirstMidName, Course = m.Course.Title }) .Project() .Find(2); // Equivalentes para Find() com Include() e ThenInclude() var d1 = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .Find(2); var d2 = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Map(m => new { StudentName = m.FirstMidName, TotalEnrollments = m.Enrollments.Count, Enrollments = m.Enrollments.Select(s => new { Grade = s.Grade, Course = s.Course.Title }) }) .Project() .Find(2); // Search var e0_filter = new DataFilter <Student>(); e0_filter.AddFilter(w => w.FirstMidName.Contains("e")); var e0_1 = _searchableStorage.Search(e0_filter); var e0_2 = _searchableStorage2.Search(e0_filter); // Equivalentes para Search() com Include() e ThenInclude() var e1 = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .Filter(w => w.FirstMidName.Contains("e")) .Search() .ToList(); var e2 = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Map(m => new { StudentName = m.FirstMidName, TotalEnrollments = m.Enrollments.Count, Enrollments = m.Enrollments.Select(s => new { Grade = s.Grade, Course = s.Course.Title }) }) .Project() .Filter(w => w.FirstMidName.Contains("e")) .Search() .ToList(); // Equivalentes para Search() com Include() e ThenInclude() var f1_a = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .Sort(s => s.FirstMidName) .LimitedGet(); var f2_a = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Map(m => new { StudentName = m.FirstMidName, TotalEnrollments = m.Enrollments.Count, Enrollments = m.Enrollments.Select(s => new { Grade = s.Grade, Course = s.Course.Title }) }) .Project() .SortDescending(s => s.FirstMidName) .LimitedGet(); var f1_b = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .OffsetBegin(3) .LimitedGet(); var f2_b = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Map(m => new { StudentName = m.FirstMidName, TotalEnrollments = m.Enrollments.Count, Enrollments = m.Enrollments.Select(s => new { Grade = s.Grade, Course = s.Course.Title }) }) .Project() .OffsetLimit(3) .LimitedGet(); var f1_c = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .Paginate(1, 3) .LimitedGet(); var f2_c = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Map(m => new { StudentName = m.FirstMidName, TotalEnrollments = m.Enrollments.Count, Enrollments = m.Enrollments.Select(s => new { Grade = s.Grade, Course = s.Course.Title }) }) .Project() .Paginate(2, 3) .LimitedGet(); var g1_a = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .Sort(s => s.LastName) .Filter(w => w.ID > 0) .LimitedSearch(); var g1_b = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Project() .Filter(w => w.ID > 0) .Sort(s => s.LastName) .LimitedSearch(); var g2_a = lazyStore.AsFluentQuery() .Projection() .Include(i => i.Enrollments) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Map(m => new { StudentName = $"{m.LastName}, {m.FirstMidName}", TotalEnrollments = m.Enrollments.Count, Enrollments = m.Enrollments.Select(s => new { Grade = s.Grade, Course = s.Course.Title }) }) .Project() .Sort(s => s.LastName) .Filter(w => w.ID > 0) .LimitedSearch(); var g2_b = lazyStore.AsFluentQuery() .Projection() .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Course>(i => i.Course) .Include <Enrollment>(i => i.Enrollments) .ThenInclude <Student>(i => i.Student) .Map(m => new { StudentName = $"{m.LastName}, {m.FirstMidName}", TotalEnrollments = m.Enrollments.Count, Enrollments = m.Enrollments.Select(s => new { Grade = s.Grade, Course = s.Course.Title, Student = s.Student == null ? string.Empty : s.Student.FirstMidName }) }) .Project() .Filter(w => w.ID > 0) .Sort(s => s.LastName) .LimitedSearch(); return(View()); }