Выберите все столбцы после JOIN в LINQ

У меня есть две таблицы, Table1 и Table2. Я хочу выполнить, скажем, левое внешнее соединение:

var myOutput = from object1 in Table1
               join object2 in Table2
               on object1.Property1 equals object2.Property2 into Table3
               from output in Table3.DefaultIfEmpty()
               select new
                   {
                       object1.Property1,
                       object1.Property2,
                       //...
                       output.Property3,
                       output.Property4,
                       //...
                   };

Как вы можете заметить, я хочу выбрать все свойства обоих объектов из результирующей таблицы (перечисляемые при объединении содержат объекты определенных типов - они разные для обоих отношений). Конечно, я могу выбрать свойства в анонимном select, как показано в примере.

Мой вопрос заключается в том, как избежать указания всех свойств вручную? Я хотел бы иметь что-то вроде SELECT * FROM TABLE3, где TABLE3 - результирующее отношение (после присоединения Table1 и Table2).

Спасибо заранее за подсказки.

Ответ 1

Вы должны указать каждый вручную, если хотите выполнить проект в сплющенный тип. Другой вариант состоит в том, чтобы только ваш комбинированный тип содержал оба объекта, и объекты, естественно, принесли бы их свойства.

select new 
{
    Object1 = object1,
    Object2 = output
};

И вы будете работать с ним, как myObj.Object1.Property1, myObj.Object2.Property4 и т.д.

Один из последних вариантов, которые по-прежнему связаны с ручной работой, заключается в определении соответствующего типа и использовании конструктора или метода построения, который выполняет работу по сегментированию свойств объекта в сплющенный тип. Вы по-прежнему выполняете ручное сопоставление, но вы изолируете его от логики запроса.

select new CombinedType(object1, output);
//or 
select builder.GetCombinedType(object1, output);