Mam dwie tabele, Table1
i Table2
. Chcę wykonać, powiedzmy, lewe sprzężenie zewnętrzne:Zaznacz wszystkie kolumny po JOIN w LINQ
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,
//...
};
Jak można zauważyć, chcę zaznaczyć wszystkie właściwości obu obiektów z otrzymanej tabeli (The enumerables uwzględnione podczas łączenia zawierają obiekty niektórych rodzajów - są one różne dla obu relacji). Oczywiście mogę wybrać właściwości w anonimowym wyborze, jak pokazano w przykładzie.
Moje pytanie brzmi: jak uniknąć ręcznego określania wszystkich właściwości? Chciałbym mieć coś w rodzaju SELECT * FROM TABLE3
, gdzie TABLE3
jest wynikową relacją (po dołączeniu do TABLE1
i TABLE2
).
Z góry dziękuję za wskazówki.
Czy pierwsza opcja nie używa metody ToString() podczas przypisania? W takim przypadku otrzymam na przykład wartości "Namespace.MyType" w kolumnie o nazwie Object1 po wykonaniu myOutput.ToArray() ... – Jamie
Nie, nie wywołałoby to 'ToString()', co daje wyobrażenie, że ? Czy wiążesz go z jakimś formantem interfejsu użytkownika? Kontrolka * może wywołać 'ToString()', ale samo zapytanie jest autentyczne, tt po prostu używa całego obiektu i odwzorowuje go na właściwość. –
Twój komentarz dał mi pewien pomysł - stworzyłem nową klasę zawierającą odniesienia do obu obiektów. Wtedy łatwo jest związać się z pewnymi właściwościami tych znaków :) – Jamie