Я работаю над проектом с использованием Linq и Entity Framework Core.
Я борюсь с запросом.
У меня есть две модели доступа к данным.
public class JobPost
{
public int Id {get;set;}
public string RoleTitle { get; set;}
public Domain Domain1 {get;set;}
public Domain Domian2 {get;set;}
public Domain Domain3 {get;set;}
public Domain Domain4 {get;set;}
public Domain Domain5 {get;set;}
}
[Owned]
public class Domain
{
public int? CategoryId {get;set;}
public int? SubcategoryId {get;set;}
}
Должность - это объект / таблица с Id в качестве ключа. У него есть одно название роли (обязательно) и 1-5 доменов (это объясняет, почему свойства Id домена обнуляются). Домен имеет CategoryId и SubcategoryId в качестве ключей. Соискатели смогут фильтровать вакансии по доменам. Примеры доменов:
Category Subcategory
Domain IT Mobile
Domain IT Database
Domain IT Design
Domain Transport Driving
Domain Transport Spedition
Два домена различаются, если они различаются по их ID категории или ИД подкатегории.
Случай пользователя для рассматриваемого запроса: Пользователь (Работодатель X) опубликовал 3 должности: Y, Z и W. И Y, и Z имеют «Разработчик Sotware» в качестве названия роли, в то время как W имеет «Фронтальный разработчик». Вакансия Y имеет один домен: IT, Mobile. Работа должность Z имеет два домена: ИТ, мобильный и ИТ, базы данных. Вакансия W имеет один домен: IT, дизайн. Теперь пользователь хочет создать третий пост. Пользователь нажимает кнопку + Post и получает запрос либо выбрать предыдущее название роли («Разработчик Sotware» или «Front-end разработчик»), либо создать новую. В этом случае пользователь выбирает «Разработчик Sotware» из списка предыдущих пунктов. Далее пользователю предлагается отправить домены. Мы хотим упростить задачу для нашего пользователя, представив на выбор список отдельных доменов, которые ранее применялись для должностей с ролью «Разработчик программного обеспечения». В этом конкретном случае c в списке есть два домена: «IT, мобильный» и «IT, база данных», к которым может обратиться пользователь.
Так что вопрос в том, как написать этот запрос в Linq, поэтому мы получаем IEnumerable из всех отдельных доменов, которые применяются для указанного c роли роли во всех должностях, выполняемых сервером SQL, а НЕ клиентом.
Я пробовал разные стратегии такие как projectiong, объединение, группировка в Linq, но без результатов, которые я хочу. Единственный способ, которым я могу это сделать, - это получить все должности, отфильтрованные по названию роли, и удалить дубликаты в моей модели представления.
from p in dbCotext.JobPosts
where p.RoleTitle == roleTitle
select p
//client code for removing duplicates, not what I want
Возможно ли сделать это в Linq или мне нужно написать этот запрос в SQL?
Заранее спасибо.