Avatar billede milandt Nybegynder
16. oktober 2008 - 16:43 Der er 3 kommentarer og
1 løsning

LINQ to SQL, query fra flere tabeller

Table Event
Id
EventName


Table CustomField
Id
EventId
FieldName


Table Signup
Id
EventId
Email


Table CustomFieldValue
Id
SignupId
CustomFieldId
Value



Event
1, Skitur
2, Fodbold


CustomField
1, 1, Fornavn
2, 1, Højde
3, 2, Fornavn
4, 2, By


Signup
1, 1, anders@andeby.dk
2, 1, mickey@andeby.dk
3, 2, fedtmule@andeby.dk
4, 2, anders@andeby.dk


CustomFieldValue
1, 1, 1, Anders
2, 1, 2, 150cm
3, 2, 1, Mickey
4, 2, 2, 140cm
5, 3, 3, Fedtmule
6, 3, 4, Andeby
7, 4, 3, Anders
8, 4, 4, Andeby


Som I kan se på ovenstående har jeg en datastruktur med Events, CustomFields, Signups og CustomFieldValues. Der kan oprettes brugerdefinerede CustomFields for hvert Event.

Jeg har brug for at lave et udtræk over alle Signups for et Event, inkl en oversigt over indtastningerne i CustomFieldValue.

Det kunne f.eks se sådan ud:


** Oversigt for Skitur **
----------------------------------------
SignupId | Email | Fornavn | Højde
----------------------------------------
1 | anders@andeby.dk | Anders | 150cm
2 | mickey@andeby.dk | Mickey | 140cm


** Oversigt for Fodbold **
----------------------------------------
SignupId | Email | Fornavn | By
----------------------------------------
3 | fedtmule@andeby.dk | Fedtmule | Andeby
4 | anders@andeby.dk | Anders | Andeby


Jeg kunne godt tænke mig en løsning som benytter LINQ to SQL, så jeg på mit Event objekt kan udvikle en metode der hender EventSignupInfo og er et view lig de to ovenstående eksempler. Formålet er at det skal kunne eksporteres til Excel.

Bemærk at mine "kolonner" i min eksport til dels kommer fra rækkerne i CustomField tabellen.
Avatar billede milandt Nybegynder
16. oktober 2008 - 17:20 #1
Indtil videre har jeg følgende, men vil gerne have Fields og Values ud som kolonner i stedet for som en Collection i min query.

from s in db.Signup
where s.EventId == this.Id
select new SignupInformation
{
    Email = s.Email,
    Fields = (from f in s.Event.CustomField select f.FieldName).ToList<string>(),
    Values = (from v in s.CustomFieldValue select v.Value).ToList<string>()
}).ToList<SignupInformation>();   


public class SignupInformation
{
    public string Email { get; set; }
    public List<string> Fields { get; set; }
    public List<string> Values { get; set; }
}
Avatar billede milandt Nybegynder
16. oktober 2008 - 19:32 #2
Om ikke andet kan man jo altid opbygge en DataTable med kolonner og rækker dynamisk og så sende den som en stream og læse den i Excel.
Avatar billede milandt Nybegynder
16. oktober 2008 - 19:32 #3
Tak for svaret!
Avatar billede milandt Nybegynder
16. oktober 2008 - 19:32 #4
Og tak for points.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester