Выберите все столбцы после 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);