2013-06-05 12 views
5

esistente Ho una lista di tipi anonimi che ricevo dal mio database:Creare un nuovo elenco tipo anonimo all'unione sul tipo di elenco anonimo

var takenChannels = (from b in bq.GetStuff(db) 
        where b.RecordType == "H" && b.TourStartDateTime.Date == date 
        select new { Start = b.TourStartDateTime, End = b.TourEndDateTime, Channel = b.RadioChannel, TourArea = b.TourArea }).ToList(); 

allora io uso questa informazione elenco per fare alcune cose in un foreach ciclo continuo. Voglio aggiungere a questo elenco un nuovo oggetto anonimo per quando torno indietro nel loop.

Qualcosa di simile:

takenChannels.Union{new[] { new{Start = DateTime.Now, End = DateTime.Now.AddDays(1), Channel = 25, TourArea = "Area" }}); 

Ovviamente questo non funziona. Come lo faccio?

Edit 1:

takenChannels.Add(new { Start = s, End = e, Channel = channel, TourArea = booking.TourArea }); 

Questo è il più vicino che ho finora (Grazie a Daniel) ... ma l'errore che ottengo è:

errore 6 Argument 1: non può convertire da 'AnonymousType # 2' a 'AnonymousType # 1'

+2

'Ovviamente questo non funziona. No, non è ovvio. Questo genera un errore? E allora? Non sospetterei che non funzioni. Nota che 'Union' non muta la lista, crea una nuova sequenza, quindi dovrai assegnarla a qualcosa per osservare il risultato. – Servy

+0

Mi dispiace, ho avuto problemi con il mio codice. C'è un miscuglio di 2 soluzioni tentate lì. Ho modificato il mio Q. – Smithy

+2

I tipi di proprietà non devono corrispondere correttamente. Forse uno di loro è una stringa in un posto e un int in un altro, o qualcosa del genere. Se assicuri di avere le stesse proprietà con * esattamente * gli stessi nomi e * esattamente * gli stessi tipi, funzionerà perfettamente. – Servy

risposta

9

Questa risposta potrebbe essere un po 'tardi, ma poiché questa è la domanda che ho trovato quando Googling per lo stesso problema, penso che dovrei completarla con una risposta di lavoro.

Non ci sono problemi a Union più volte su tipi anonimi. È importante che tutte le proprietà siano dichiarate in tutte le istanze e che abbiano lo stesso tipo di dati. in caso contrario, si ottiene l'errore sopra.

  • Nel vostro caso specifico, non il database forse tornare TourStartDateTime o TourEndDateTime come DateTime??
  • È RadioChannel un int dal database o forse uno int? o string?
  • È TourArea a string nel database?

Basta assicurarsi che i tipi di dati corrispondano e si dovrebbe andare bene. Di seguito è riportato uno snippet di codice di lavoro che uso nel mio programma:

var regions = (
    new[] { new { Id = "-1", Name = "---", Pattern = (string)null } } 
).Union(
    from x in db.Userlists where x.ListType == 2 select new { Id = x.UserlistID.ToString(), Name = x.Name, Pattern = (string)null } 
).Union(
    from x in db.Lookups where x.Category == "Stock" select new { Id = x.Key, Name = x.Key, Pattern = x.Value } 
).ToArray(); 
+0

Grazie mille Mattias. –

3

Si può semplicemente Add alla lista:

takenChannels.Add(new { Start = ... }); 
+1

Posso aggiungere ... assicurandoti che i nomi e i tipi dell'oggetto di tipo anonimo che aggiungi siano gli stessi degli elementi della lista. – Les

Problemi correlati