my.ASPItalia.com
ASP.NET
|
HTML5
|
LINQ e Entity Framework
|
Silverlight
|
Windows Phone
|
.NET Framework
|
Windows 8
|
Libro WP7
|
Libro HTML5
|
Corso HTML5
Iscriviti
Login
Newsletter
Home
Articoli
Script
Notizie
FORUM
Blogs
Media
Tutorials
Corsi
Libri
Eventi
Tags
Tutti i forum
Ricerca
FAQ
Fai una domanda
Linq e dataset e left join
in
.NET Framework
>
ASP.NET 3.5
Ultimo messaggio
Luca.1967
il 4 maggio 2011 alle 18:11
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 -
Rispondi
Quoting
manuel0081
il 7 maggio 2011 alle 09:03
1.318 messaggi
dal 22 febbraio 2006
blogs.ugidotnet.org
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
Rispondi
Quoting
Luca.1967
il 7 maggio 2011 alle 14:03
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 -
Rispondi
Quoting
federico.orlandini
l'8 maggio 2011 alle 12:02
56 messaggi
dal 13 marzo 2010
www.federicoorlandini.it
Ciao,
non ti converrebbe creare una vista lato DB?
Rispondi
Quoting
Luca.1967
l'8 maggio 2011 alle 12:47
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.
;)
Rispondi
Quoting
Salto rapido
Ultimi messaggi
Tutti i forum
Ricerca
Utenti online
ASP.NET
ASP.NET 2.0
ASP.NET 3.5
ASP.NET 4.0
.NET Framework
Silverlight
Windows Phone
Windows Presentation Foundation e WinForms
Windows Communication e Workflow
ASP - avanzato
ASP - base
SQL Server e MySQL
E-commerce
Hosting
Altri linguaggi e tecnologie
Windows Server, IIS & Security
Libri
OT
Commenti: blogs e notizie
Eventi
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
Effettua il login!
Hai dimenticato la password?
Ultimi messaggi
Sondaggi con RadioButtonList
Trovare un controllo all'interno di un gridview
(1)
sessioni scadute
variabile session
(3)
registrazione utenti
(5)
problema con il controllo create user wizard
(3)
Aggiornare contenuto compreso nei tag <asp:panel> e </asp:panel> di una pagina web, richiamandola da area riservata.
(5)
UTENTI ONLINE
In primo piano
Annunciate le versioni ufficiali di Visual Studio 11
Rilasciato Visual Studio 11 Beta: scopri tutte le novità!
Windows 8 Consumer Preview: segui con noi la diretta
I più letti di oggi
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Applicazioni Metro con XAML: cosa cambia per lo sviluppatore .NET con Windows 8
Screencast 'Primi passi con Windows Workflow Foundation'
Windows Phone 7.5 Developer Day: Introduzione allo sviluppo
WhyMCA - Bologna
ASP.NET 4.0 in C# e VB - Espresso
Sviluppare applicazioni per Windows Phone
Migliorare le prestazioni di Entity Framework limitando l'uso del metodo Include
Salvare e leggere rapidamente le impostazioni di un'applicazione Windows Phone
Estrarre un elemento in una determinata posizione da una lista non indicizzata con LINQ
Media
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Metro Style App per Windows 8 con HTML e Javascript
Tutti i media
In evidenza
Il meglio della settimana
Dal 29 febbraio arriva WinRTItalia.com: tutto sullo sviluppo per Windows 8 e Metro
Migliorare le prestazioni di Entity Framework limitando l'uso del metodo Include
Aprire una popup in Silverlight
Sviluppare applicazioni web mobile con HTML5 e jQuery mobile
Disegnare un'applicazione a servizi con Entity Framework e WCF
Il nuovo tag time in HTML5
Salvare e leggere rapidamente le impostazioni di un'applicazione Windows Phone
MISC
I nostri autori
Collabora con noi!
Media Kit - Pubblicità sul nostro network