var items = inputReportDefinitions.GroupJoin(
baseReportDefinitions,
firstSelector => new {
firstSelector.ParentName, firstSelector.ReportName
},
secondSelector => new {
secondSelector.ParentName, secondSelector.ReportName
},
(inputReport, baseCollection) => new {inputReport, baseCollection})
.SelectMany(grp => grp.baseCollection.DefaultIfEmpty(),
(col, baseReport) => new
{
Base = baseReport,
Input = col.inputReport
});
Я считаю, что это в конечном итоге является левым внешним соединением Я не знаю, как преобразовать это чудовище в оператор запроса. Я думаю, что если вы добавите AsQueryable()
до конца, его можно будет использовать в Linq-to-SQL, но, честно говоря, у меня мало опыта с этим.
РЕДАКТИРОВАТЬ: Я понял это. Гораздо проще читать:
var otherItems = from i in inputReportDefinitions
join b in baseReportDefinitions
on new {i.ParentName, i.ReportName}
equals new {b.ParentName, b.ReportName} into other
from baseReport in other.DefaultIfEmpty()
select new
{
Input = i,
Base = baseReport
};