67 messaggi dal 17 dicembre 2010
Scusate, ma proprio non ci arrivo ...

Utilizzo questo codice linq che avendo una lista di discussioni, la raggruppa per id_discussione e restituisce il valore minumo di id_utente ed il valore massimo di id_utente.
Questo funziona:

Dim AnnuncioTot = From c In db.F_discussioni _
Where c.id_s_forum = 6 _
Order By c.id Ascending _
Group c By c.id_discussione Into Group _
Select New With { _
.id = Group.Min(Function(c) c.id), _
.Min_utente = Group.Min(Function(c) c.id_utente), _
.Max_utente = Group.Max(Function(c) c.id_utente) _
}

Poi la filtro nuovamente per avere solo 126 come Min_utente:

Dim AnnuncioFil = From c In AnnuncioTot _
Where c.Min_utente = 126 _
Select c


In questo modo trovo il min e max di id_utente...
Ipotizzando questa come una struttura di un forum, a me interessa ricavare il First e Last di Id_utente... Ma come si fa??

Sarebbe così semplice un:
.Last_utente = Group.Last(Function(c) c.id_utente),

Grazie
67 messaggi dal 17 dicembre 2010
L'ho risolta così, ma pare molto lento...

Dim AnnunciX = (From c In db.F_discussioni _
Where c.id_s_forum = 6 _
Group By c.ref Into Group _
Select New With {ref, _
.Utente_first = (From UF In db.F_discussioni Where UF.ref = ref Order By UF.id Select UF.id_utente, UF.Utenti.utente).First, _
.Utente_last = (From UF In db.F_discussioni Where UF.ref = ref Order By UF.id Descending Select UF.id_utente, UF.Utenti.utente).First, _
.titolo = Group.Min(Function(c) c.titolo), _
.Max_data = Group.Max(Function(c) c.data), _
.Min_data = Group.Min(Function(c) c.data), _
.Tot_risposte = Group.Count() _
})

Dim AnnuncioFil = From c In AnnunciX _
Where c.Utente_first.id_utente = Request.Cookies("GV")("id_utente") _
Order By c.Max_data Descending _
Select c

ListView_Forum.DataSource = AnnuncioFil
ListView_Forum.DataBind()
zonahobby wrote:

Nessuno Nessuno?

qual è io tuo obiettivo? facciamo prima a capire dove vuoi arrivare (e perchè), anzichè leggere le lambda in VB
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
67 messaggi dal 17 dicembre 2010
Immaginiamo un forum tutto in un unica tabella.
id - utente - titolo - testo - data - id_riferimento

Quindi x apre una discussione il 01/01/01:

id = 1
utente = x
titoli = 1° discussione
testo = questa è la 1° discussione
data = 01/01/01
id_riferimento = 1

y risponde il 02/01/01

id = 2
utente = y
titoli = null
testo = bella questa discussione
data = 02/01/01
id_riferimento = 1

anche z risponde il 03/01/01
id = 3
utente = z
titoli = null
testo = anche per me è bella questa discussione
data = 03/01/01
id_riferimento = 1



Ora vorrei avere la home page del forum così strutturata:

aperto da: x il 01/01/01
titolo: 1° discussione
risposte: 2
utlimo intervento di : z il 03/01/01


Utilizzando il group trovo il min e max di data ed il count delle risposte ma non riesco a trovare il first e last di utente.
Il tutto funziona con il 2° codice scritto ma ho notato che le pagine sono lente nel caricamento.
67 messaggi dal 17 dicembre 2010
Successivamente vorrei filtrare le discussioni per avere tutte le discussioni aperte da x (sempre visualizzando aperto da, titolo, risposte, ultimo intervento ....)
zonahobby wrote:
Il tutto funziona con il 2° codice scritto ma ho notato che le pagine sono lente nel caricamento.

per queste cose una stored procedure resta la via migliore: tu stai manipolando dei dati e vuoi farlo in maniera performante, le stored procedure sono la risposta migliore.
ad ogni modo, volendo farlo con LINQ to SQL (immagino), secondo me la cosa migliore è procedere per step:
- ti fai dare i thread, prendendo solo i post che non hanno parent - calcoli il max/min di utenti e data

PS: se puoi cambiare il design del db, in genere, per evitare questo problema, fai già 3 campia aggiuntivi (post totale, ultimo post ed ultimo autore), che salvi in fase di inserimento. in questo modo, ti basterà leggere il post iniziale per avere tutte le info aggiornate. più o meno tutti i software per forum fanno così
.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

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.