2013-06-05 5 views
5

ich eine Liste von anonymen Typen, die ich aus meiner Datenbank erhalten:Erstellen Sie eine neue Liste anonyme Typs zur Vereinigung auf bestehende anonyme Typenliste

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(); 

Dann info Ich benutze diese Liste ein paar Sachen in einer foreach zu tun Schleife. Ich möchte zu dieser Liste ein neues anonymes Element hinzufügen, wenn ich in der Schleife zurückkomme.

Etwas wie:

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

Offensichtlich ist dies nicht funktioniert. Wie mache ich es?

Edit 1:

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

Dies ist der nächstgelegene ich habe bisher (Danke an Daniel) ... aber die Fehler, die ich bekommen ist:

Fehler 6 Argument 1: kann nicht von 'AnonymousType # 2' 'AnonymousType # 1' konvertieren

+2

'Offensichtlich funktioniert das nicht.' Nein, es ist nicht offensichtlich. Führt das zu einem Fehler? Wenn ja, was? Ich würde nicht vermuten, dass es nicht funktioniert. Beachten Sie, dass "Union" die Liste nicht mutiert, sondern eine neue Sequenz erstellt. Sie müssen diese also etwas zuordnen, um das Ergebnis zu beobachten. – Servy

+0

Entschuldigung, ich habe meinen Code durcheinander gebracht. Es gibt einen Brei von 2 Lösungsversuchen. Ich habe meine Q bearbeitet. – Smithy

+2

Die Typen der Eigenschaften müssen nicht richtig übereinstimmen. Vielleicht ist einer von ihnen ein String an einem Ort und ein Int in einem anderen, oder so ähnlich. Wenn Sie sicherstellen, dass Sie die gleichen Eigenschaften mit * genau * den gleichen Namen und * genau * den gleichen Typen haben, dann wird es gut funktionieren. – Servy

Antwort

9

Diese Antwort könnte ein bisschen spät, aber da dies die Frage ist, ich fand, als für das gleiche Problem googeln, ich glaube, ich es mit einer Arbeits Antwort vervollständigen sollte.

Es gibt kein Problem zu Union mehrere Male über anonyme Typen. Es ist wichtig, dass alle Eigenschaften in allen Instanzen deklariert sind und dass sie denselben Datentyp haben. Wenn nicht, erhalten Sie den obigen Fehler.

  • In Ihrem speziellen Fall wird vielleicht die Datenbank TourStartDateTime oder TourEndDateTime als DateTime? zurückkehren?
  • Ist RadioChannel ein int aus der Datenbank oder vielleicht ein int? oder string?
  • Ist TourArea ein string in der Datenbank?

Stellen Sie einfach sicher, dass die Datentypen übereinstimmen und Sie sollten in Ordnung sein. Unten ist ein funktionierendes Codeschnipsel, das ich in meinem eigenen Programm verwende:

+0

Vielen Dank Mattias. –

3

Sie können einfach Add zur Liste:

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

Darf ich hinzufügen ... sicher sein, dass die Namen und Typen des anonymen Typs Objekt, das Sie hinzufügen, die gleichen wie die Listenelemente sind. – Les