44 messaggi dal 22 luglio 2007
Salve a tutti...
Mi rivolgo nuovamente a voi a causa della mia totale ignoranza su linq.
La questione è la seguente...
Sto tentando di costruire un semplice day planner (testuale) dove visualizzare gli impegni giornalieri.

L'ambiente è asp .net 3.5, con un db access. In questo db ho le seguenti tabelle:
TBL_Planner, formata da IDPlanner(Identity), e OrarioPlanner(double)
TBL_Dati, formata da IDDati(Identity), Giorno(double), Orario(integer), e altri dati

TBL_Planner, contiene semplicemente gli orari, in ordine crescente, dalle 7.30 alle 20.00, ad intervalli di 30 minuti;
TBL_Dati, contiente le date delle lezioni, il campo orario relazionabile a TBL_Planner sull'identity, e altri dettagli

entrambe le tabelle vengono caricate in un dataset, la prima in maniera completa tramite una semplice query (select), la seconda tramite una query (select... where) dove la condizione è la data.

Fin qui tutto funziona... anche grazie a voi.

Ora quello che vorrei riuscire a fare è la seguente cosa (non so neanche se sia possibile)... Vorrei fare un left join in modo da caricare in un gridview tutti i record della tabella TBL_Planner e (ovviamente nella riga giusta) i record della TBL_Dati.
Lavorando su access, riesco a costruire delle query che poi potrei interrogare da codice ma questo limiterebbe la portabilità del db.
Leggendo leggendo, ho trovato che con linq forse il modo c'è ma il problema è che non ho la più pallida idea di come usarlo.

Ho caricato i namespace e tutto il resto, mi sono guardato una marea di esempi e non ci ho capito niente... Probablmente sono limitato, ma non riesco a capirci proprio niente...

Una mano?

Aggiungo che lavoro in vb e che tutti gli esempi che ho trovato probabilmente danno per scontate una serie di cose (c'è un maledetto db con dei cust, customer, customers e affini che impazza sul web nelle spiegazioni di linq) oltre ad essere quasi tutti in c# (un po' lo capisco, ma su alcune cose poi mi perdo). Inoltre la mia connessione al db è in connectionless.

Grazie.
Modificato da Luca.1967 il 04 maggio 2011 18.13 -
Modificato da Luca.1967 il 07 maggio 2011 14.13 -
forse non ho capito: se fai "select * from TBL_Planner left outer join TBL_Dati on TBL_Dati.IDPlanner = TBL_Planner.IDPlanner"
Forse ti manca il campo IDPLanner sulla tabella TBL_Dati (se stai usando l'orario devi usare uno stesso tipo di dato tra le due tabelle).

Se posso darti un altro suggerimento la tabella TBL_Planner probabilmente non ti serve... puoi tranquillamente scorrere da codice gli orari tra le xx e le yy step zz
Modificato da manuel0081 il 07 maggio 2011 09.04 -

Ormai programmano tutti... ma la professionalità appartiene a pochi
44 messaggi dal 22 luglio 2007
Cerco di spiegarmi meglio...
Anzi,posto il codice...

Allora la prima query, quella il cui risultato sarebbe TBL_Dati è la seguente:

"SELECT IDAppuntamento, OrarioPlanner, AppuntamentoCategoria, AppuntamentoTipo, AppuntamentoTipologia FROM Appuntamenti_Tipo INNER JOIN (Appuntamenti_Categorie INNER JOIN (Appuntamenti_Tipologia INNER JOIN (Appuntamenti_Planner INNER JOIN Appuntamenti_Calendario ON Appuntamenti_Planner.IDOrarioPlanner = Appuntamenti_Calendario.OraInizio) ON Appuntamenti_Tipologia.IDAppuntamentiTipologia = Appuntamenti_Calendario.Tipologia) ON Appuntamenti_Categorie.IDAppuntamentocategoria = Appuntamenti_Calendario.Categoria) ON Appuntamenti_Tipo.IDTipoAppuntamento = Appuntamenti_Calendario.Tipo WHERE Appuntamenti_Calendario.DataAppuntamento = " & Giorni & " AND AttivoAppuntamento = 'Y' order by OrarioPlanner, AppuntamentoCategoria"

In questa query l'unico paramentro è "Giorni", che contiene la data da visualizzare. L'altra query (corrispondente alla TBL_Planner) è:

"select * from Appuntamenti_Planner order by OrarioPlanner"

Entrambe riempono due tabelle in un dataset creato a runtime.

Quello che vorrei riuscire a fare è un left join tra queste due. Se lo faccio brutalmente in Access, ossia con un

"select * from Appuntamenti_Planner left outer join (tutta la query di sopra con tutti gli on corretti)"

Access mi risponde che non sa in che ordine deve eseguire la query. Ora, probabilmente le mie carenze non sono solo in LINQ ma anche in SQL (perchè mi sembra strano che non si possa fare), ma LINQ mi era sembrata l'unica strada possibile...
Circa il tuo suggerimento, è correttissimo: è solo che, nel mio contorto modo di programmare, date ed ore le tratto da seriali, cioè trasformo date e ore utilizzando tooadate e fromoadate... Quindi sugli orari, che sono numeri reali a 15 cifre decimali, è complicato calcolare lo step per un for perchè,a seconda degli arrotondamenti, poi combacia o no con il campo da confrontare. Lo so che faccio un'operazione assurda, ma questo è un retaggio che mi porto da parecchio tempo, esattamente da quando, utilizzando nel db i campi Data/ora, mi sono trovato malissimo con ricerche ed ordinamenti a causa delle impostazioni internazionali... Così non c'è possibilità d'errore.
Spero di essere stato un po' più chiaro, anche se ne dubito.
Modificato da Luca.1967 il 08 maggio 2011 12.52 -
Ciao,

non ti converrebbe creare una vista lato DB?
44 messaggi dal 22 luglio 2007
Ci avevo pensato ma il problema è il seguente (e non è da poco):
sono almomento costretto a lavorare con access e l'unico modo per creare una vista lato db è tramite query. In ogni caso, nel momento in cui vado a filtrare i record per data, visto che avrei una situazione del tipo:

1) record contenenti dati relativi ad ora, data, dettagli vari
2) record contenenti dati relativi ad ora

verrebbero comunque portati nel dataset (o gridview) solo i record contenenti anche la data... e questo già lo ottengo solo con la prima delle due query.
Inoltre vorrei riuscire a farlo da codice proprio per evitare che, se un domani dovesse cambiare l'ambiente su cui la scuola si appoggia (oggi parliamo di Aruba con Access ma un domani, se riusciranno a trovare due soldi vista la situazione, potrebbe essere SQL Server), ci si trovi a dover rimettere le mani sul db ricreando viste o stored procedure.
Aggiungo che il sito è funzionante anche così, ma era per renderlo "più carino" ed anche più funzionale. Avrebbero sott'occhio tutti gli impegni di una giornata con relative ore vuote tra un impegno e un altro, e quindi maggiore possibilità di organizzare le giornate.

E poi mi sfizia trovare una strada (con il vostro aiuto, perchè da solo mi sono perso) per farlo.

;)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
    In primo piano

    I più letti di oggi

    Media
    In evidenza
    MISC