У меня есть база данных, которая выглядит (упрощенный), как это:Как сформулировать GroupJoin() заявление
var reports = new[] {
new { ReportId = 1, Title = "Report A" },
new { ReportId = 2, Title = "Report B" },
};
var testCases = new[] {
new { TestId = 1, Title = "Test A" },
new { TestId = 2, Title = "Test B" },
new { TestId = 3, Title = "Test C" },
new { TestId = 4, Title = "Test D" },
new { TestId = 5, Title = "Test E" },
};
var testRuns = new[] {
new { TestId = 1, ReportId = 1 },
new { TestId = 2, ReportId = 1 },
new { TestId = 1, ReportId = 2 },
new { TestId = 2, ReportId = 2 },
new { TestId = 3, ReportId = 2 },
new { TestId = 4, ReportId = 2 },
};
Как результат, я хотел бы получить список testCases
сгруппированных с соответствующими reports
, т.е. :
Test A => [Report A, Report B]
Test B => [Report A, Report B]
Test C => [Report B]
Test D => [Report B]
Test E => []
Я не уверен, как сформулировать это в SQL или LINQ. Я думаю, мне нужно объединение группы или левое внешнее соединение или, тем не менее, оно вызвано, но я еще не мог понять правильный синтаксис. Я пытался что-то вроде этого, но до сих пор скучаю часть:
var result = tests.GroupJoin(reports, t => t.TestId, ???, (t, rs) => new { Test = t, Reports = rs });
Или, может быть, есть совершенно другой способ сформулировать этот запрос.
EDIT: Не каждая запись в testCases
указана в testRuns
.
какую версия SQL вы работаете? mysql, tsql, oracle? –
БД находится на Microsoft SQL Server, но до сих пор я использовал Entity Framework в качестве уровня абстракции. – fschoenm