У меня есть простой один ко многим между сотрудниками и навыками
var bob = new Employee
{
Name = "Bob",
Title = "Senior Developer",
Skills = new Collection<string> { "ASP.NET", "C#", "JavaScript", "SQL", "XML" }
};
var sam = new Employee
{
Name = "Sam",
Title = "Developer",
Skills = new Collection<string> { "ASP.NET", "C#", "Oracle", "XML" }
};
var employees = new List<Employee> { bob, sam };
Target
Мне нужны все сотрудники со всеми навыками, НО C # one.
Попытка
Это json, который я получаю, когда просто возвращаю сотрудников с помощью метода веб-API
[
{
"title": "Senior Developer",
"name": "Bob",
"skills": [
"ASP.NET",
"C#",
"JavaScript",
"SQL",
"XML"
]
},
{
"title": "Developer",
"name": "Sam",
"skills": [
"ASP.NET",
"C#",
"Oracle",
"XML"
]
}
]
Моя цель JSON будет
[
{
"title": "Senior Developer",
"name": "Bob",
"skills": [
"ASP.NET",
"JavaScript",
"SQL",
"XML"
]
},
{
"title": "Developer",
"name": "Sam",
"skills": [
"ASP.NET",
"Oracle",
"XML"
]
}
]
Я попытался выполнить selectMany, но затем я потерял родительского сотрудника. Я попытался использовать перегрузку селектора результатов для select many, но тогда нужное вложение Employee потеряно в json.
Если я выполню это
var skills = employees
.SelectMany(e => e.Skills, (e, s) => new { e.Name, s })
.Where(empAndSkill => !empAndSkill.s.Equals("C#"));
Это JSON, который я получаю
[
{
"name": "Bob",
"s": "ASP.NET"
},
{
"name": "Bob",
"s": "JavaScript"
},
{
"name": "Bob",
"s": "SQL"
},
{
"name": "Bob",
"s": "XML"
},
{
"name": "Sam",
"s": "ASP.NET"
},
{
"name": "Sam",
"s": "Oracle"
},
{
"name": "Sam",
"s": "XML"
}
]
Очевидно, не то, чего я пытаюсь достичь. Моя цель кажется тривиальной, но решение, которое я пытаюсь найти, выглядит сложным, что напоминает мне, что, возможно, я что-то упускаю или делаю что-то не так. Я только начал с LINQ to Entities месяц назад.
Любая помощь?