Skip to content

Instantly share code, notes, and snippets.

@DeadFishC
Last active August 25, 2021 09:23
Show Gist options
  • Select an option

  • Save DeadFishC/9a0a8cdd7a380cecc5596b100e8124bf to your computer and use it in GitHub Desktop.

Select an option

Save DeadFishC/9a0a8cdd7a380cecc5596b100e8124bf to your computer and use it in GitHub Desktop.
Test 25.08.21
/*
I. Получение пользователей, у которых есть роль
*/
//a)
public List<Users> GetUsersByRole(int pageNumber, int pageSize, string role)
{
if (pageSize <= 0 || pageNumber <= 0)
throw new ArgumentOutOfRangeException();
using (var context = new MyContext())
{
List<Users> result = context.Users.Join(UserRoles,
c => c.Id,
a => a.UserId,
(users, userRoles) =>
new Users()
{
Id = users.Id,
Name = users.Name
})
.Distinct()
.OrderBy(u => u.Id)
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToList();
return result;
}
}
//b)
/*
SELECT DISTINCT name FROM Users us JOIN UserRoles ur ON us.id = ur.userid
*/
//c)
public List<UsersWithRoles> GetUsersByRole(int pageNumber, int pageSize, string role)
{
if (pageSize <= 0 || pageNumber <= 0)
throw new ArgumentOutOfRangeException();
using (var context = new MyContext())
{
List<UsersWithRoles> result = context.Users.Join(context.UserRoles,
c => c.Id,
a => a.UserId,
(users_, userRoles_) =>
new
{
Id = users_.Id,
Name = users_.Name,
RoleId = userRoles_.RoleId
})
.Distinct()
.GroupJoin(context.Roles,
c => c.RoleId,
a => a.Id,
(users_, roles_) =>
new UsersWithRoles()
{
Id = users_.Id,
Name = users_.Name,
RoleNames = roles_.Select(r => r.Name)
}
)
.OrderBy(u => u.Id)
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.ToList();
return result;
}
}
/*
II. Получение подчиненных 1 и 2 уровня.
*/
List<Employees> GetEmployees(Employees mngr)
{
using (var context = new MyContext())
{
Employees manager = context.Employees.Where(a => a.Id == mngr.Id).Select(a => a).Single();
List<Employees> empls1 = context.Employees.Where(a => a.ManagerId == manager.Id).ToList();
List<Employees> res = new List<Employees>(empls1);
foreach (var e in empls1)
{
empls1 = context.Employees.Where(a => a.ManagerId == e.Id).ToList();
res.AddRange(empls1);
}
return res;
}
}
/*
III. Необходимо вставить 10000 записей в таблицу, в которой уже есть данные. Какими способами это можно сделать?
*/
/*Используя EF6, c помощьюю методов расширения Add() или AddObject() (рекомендуется запускать SaveChanges() примерно через каждые 100 вставок, иначе можно получить очень долгое исполнение операции)
Можно использовать транзакцию.
Можно написать хранимую процедуру для макимальной производительности данной операции.
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment