110 messaggi dal 08 febbraio 2007
Ho una tabella di messaggi :
MsgId
Subject
SentOnUtc
UserFromId

una tabella Users:
UserId
Nome

e una tabella per gli invii multipli
UserId
MessageId

per trovare gli anni dei messaggi ricevuti dell'utente 13 faccio :
var years = mymessages.Where(x => x.UserFromId == 13).GroupBy(x => x.SentOnUtc.Year);

Dovrei fare la stessa cosa per i messaggi inviati
tenendo conto dei legami



MsgId -> MessageId
Subject UserId -> UserId
SentOnUtc Nome
UserFromId
Modificato da mtugnoli il 29 novembre 2013 17.31 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
a che punto sei arrivato, hai già mappato nel tuo modello la relazione molti-a-molti che esiste tra la tabella dei messaggi e quella degli utenti?

Se l'hai già fatto, nella tua classe Messaggio dovresti avere una proprietà di navigazione di tipo ICollection<Utente> che ti permette di accedere all'elenco dei destinatari.

Grazie a questa proprietà, basterà fare una piccola modifica alla tua query LINQ.
var years = mymessages.Where(x => x.Destinatari.Any(utente => utente.UserId == 13)).GroupBy(x => x.SentOnUtc.Year);

Cioè: "seleziona tutti i messaggi dove tra i destinatari ce n'è almeno uno con UserId uguale a 13, e poi raggruppa i risultati per anno di invio".

ciao,
Moreno
Modificato da BrightSoul il 01 dicembre 2013 16.51 -

Enjoy learning and just keep making
110 messaggi dal 08 febbraio 2007
Funziona !!,

Grazie per l'aiuto, ma per me linq e' ancora un po' ostico ....

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.