LINQ / Entity Framework og/eller SQL
Hej,Jeg har brug for assistance, nu har jeg rodet rundt med det her halvanden uge, uden at finde en løsning...
Jeg har en database med disse tabeller (lettere simplificeret):
Libraries: LID, Active, Title
Buildings: BID, Active, Title, FK_LID
Aisles: AID, Active, Title, FK_BID
Shelves: SID, Active, Title, FK_AID
Categories: CID, Active, Title, FK_SID
Books: BoID, Active, Title, FK_CID
Loans: LoanID, FK_LenderID, FK_LID, FK_BID, FK_BoID
Udfordringen er som følger, for at en book er "aktiv" (tilgængelig) skal både book og alle overliggende niveauer i hierakiet være aktive...
Baseret på et input bestående af en Libraries.Title og Loans.FK_LenderID skal jeg have trukket følgende ud:
Buildings.BID, Buildings.Title, Antal aktive books tilhørende den aktuelle building, Antal Loans af aktive books tilhørende den aktuelle building for den angivne lender.
Efter en hulens masse roden rundt med rå SQL, hvor jeg ender med nogle sindsygt grime (og nok voldsomt in-effektive) statements... Udvælger alle aktive books til en temp table, udvælger alle categories der refereres fra de udvalgte books OG categories er aktiv til temp tbl, udvælger alle shelves der refereres fra de udvalgte categories OG shelves er aktiv til temp tbl, udvælger alle ailses der refereres fra de udvalgte shelves OG er aktiv til temp tbl, udvælger alle buildings der refereres fra de udvalgte aisles til temp tbl, udvælger alle libraries der refereres fra de udvalgte buildings OG er aktive.
Udvælger så fra temp de(t) libraries der matcher parameteret og graver retur ned igennem temp tabellerne indtil jeg har en stribe books.BoID som jeg kan lave en count på grupperet i forhold til buildings og returnere sammen med Buildings.BID og Buildings.Title.
Det må sgu da kunne optimeres væsentligt OG samtidigt grave et antal frem fra Loans over hvor mange aktive Books elementer der er.
Jeg kunne virkeligt godt bruge input både i form af rå SQL såvel som i LINQ to Entities (C#).
Håber sgu der er nogle skarpe hjerner herinde der kan gennemskue en løsning på dette :-)