168 lines
4.2 KiB
C#
168 lines
4.2 KiB
C#
using EntityFrameworkCore.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
using var context = new DeadBallZoneLeagueDbContext();
|
|
|
|
//PrintTeams();
|
|
|
|
var teamOne = await context.Teams.FirstAsync(t => t.TeamId == 1);
|
|
var teamTwo = await context.Teams.FirstAsync(t => t.TeamId == 2);
|
|
var teamThree = await context.Teams.SingleAsync(t => t.TeamId == 3);
|
|
var teamFour = await context.Teams.SingleOrDefaultAsync(t => t.TeamId == 3);
|
|
|
|
// There is no entry for coaches yet, this function will provide a null to coach.
|
|
// Rather than raise: "System.InvalidOperationException: Sequence contains no elements."
|
|
var coach = await context.Coaches.FirstOrDefaultAsync();
|
|
|
|
async Task TrackedQuery()
|
|
{
|
|
// EF Core tracks objects that are returned by queries.
|
|
// This is less useful in disconnected applictations like APIs and Web applications.
|
|
var teams = await context.Teams
|
|
.AsNoTracking()
|
|
.ToListAsync();
|
|
|
|
foreach (var team in teams)
|
|
{
|
|
Console.WriteLine(team.Name);
|
|
}
|
|
}
|
|
|
|
async Task SkipAndTakeTeams()
|
|
{
|
|
var recordCount = 3;
|
|
var page = 0;
|
|
var next = true;
|
|
while (next)
|
|
{
|
|
var teams = await context.Teams.Skip(page * recordCount).Take(recordCount).ToListAsync();
|
|
foreach (var team in teams)
|
|
{
|
|
Console.WriteLine(team.Name);
|
|
}
|
|
Console.WriteLine("Enter 'true' for next set of records, or 'false to quit.'");
|
|
next = Convert.ToBoolean(Console.ReadLine());
|
|
|
|
if (!next) break;
|
|
page += 1;
|
|
}
|
|
}
|
|
|
|
async Task OrderedTeams()
|
|
{
|
|
var orderedTeam = await context.Teams
|
|
.OrderByDescending(t => t.Name)
|
|
.ToListAsync();
|
|
foreach (var team in orderedTeam)
|
|
{
|
|
Console.WriteLine(team.Name);
|
|
}
|
|
}
|
|
|
|
async Task GroupedTeams()
|
|
{
|
|
var groupedTeams = context.Teams
|
|
.GroupBy(t => t.CreatedDate.Date);
|
|
|
|
foreach (var groupedTeam in groupedTeams)
|
|
{
|
|
Console.WriteLine(groupedTeam.Key);
|
|
Console.WriteLine(groupedTeam.Sum(t => t.TeamId));
|
|
foreach (var team in groupedTeam)
|
|
{
|
|
Console.WriteLine(team.Name);
|
|
}
|
|
}
|
|
}
|
|
|
|
async Task CountFunctionsTeams(int id)
|
|
{
|
|
var numberOfTeams = await context.Teams.CountAsync(t => t.TeamId > id);
|
|
Console.WriteLine($"Number of teams with ID > {id}: {numberOfTeams}");
|
|
|
|
var maxTeams = await context.Teams.MaxAsync(t => t.TeamId);
|
|
Console.WriteLine($"Max teams: {maxTeams}");
|
|
|
|
var minTeams = await context.Teams.MinAsync(t => t.TeamId);
|
|
Console.WriteLine($"Min teams: {minTeams}");
|
|
|
|
var averageTeams = await context.Teams.AverageAsync(t => t.TeamId);
|
|
Console.WriteLine($"Average teams: {averageTeams}");
|
|
|
|
var sumTeams = await context.Teams.SumAsync(t => t.TeamId);
|
|
Console.WriteLine($"Sum team IDs: {sumTeams}");
|
|
}
|
|
|
|
async Task GetAllTeamsQuerySyntax(string searchTerm)
|
|
{
|
|
var teams = await (
|
|
from team in context.Teams
|
|
where EF.Functions.Like(team.Name, $"%{searchTerm}%")
|
|
select team)
|
|
.ToListAsync();
|
|
foreach (var team in teams)
|
|
{
|
|
Console.WriteLine(team.Name);
|
|
}
|
|
}
|
|
|
|
async Task PrintTeams()
|
|
{
|
|
var teams = await context.Teams.ToListAsync();
|
|
|
|
foreach (var team in teams)
|
|
{
|
|
Console.WriteLine(team.Name);
|
|
}
|
|
}
|
|
|
|
async Task PrintFilteredTeams()
|
|
{
|
|
Console.WriteLine("Enter search term: ");
|
|
var searchTerm = Console.ReadLine();
|
|
|
|
// var filteredTeams = await context.Teams.Where(t => t.Name.Contains(searchTerm)).ToListAsync();
|
|
var filteredTeams = await context.Teams.Where(t => EF.Functions.Like(t.Name, $"%{searchTerm}%")).ToListAsync();
|
|
foreach (var team in filteredTeams)
|
|
{
|
|
Console.WriteLine(team.Name);
|
|
}
|
|
}
|
|
|
|
async Task PrintTeamById(int id)
|
|
{
|
|
// Selection based on finding the Primary Key.
|
|
var teamBasedOnId = await context.Teams.FindAsync(id);
|
|
if (teamBasedOnId != null)
|
|
{
|
|
Console.WriteLine(teamBasedOnId.Name);
|
|
}
|
|
}
|
|
|
|
async Task SelectQuery()
|
|
{
|
|
var items = await context.Teams
|
|
.Select(t => new { t.Name, t.CreatedDate })
|
|
.ToListAsync();
|
|
foreach (var item in items)
|
|
{
|
|
Console.WriteLine($"{item.Name} - {item.CreatedDate}");
|
|
}
|
|
}
|
|
|
|
async Task SelectQueryDTO()
|
|
{
|
|
var items = await context.Teams
|
|
.Select(t => new TeamInfoDTO { Name = t.Name, Created = t.CreatedDate })
|
|
.ToListAsync();
|
|
foreach (var item in items)
|
|
{
|
|
Console.WriteLine($"{item.Name} - {item.Created}");
|
|
}
|
|
}
|
|
|
|
class TeamInfoDTO
|
|
{
|
|
public DateTime Created { get; set; }
|
|
public string Name { get; set; }
|
|
} |