2012-03-26 16 views
2

Ich habe zwei ObjekteWie Abfrage mit Linq-Anweisungen?

List<Report> 
List<Newsletter> 

Ich brauche bestimmte Eigenschaften wie

Id 
Date 
Status 
text 

aus den beiden Listen. Gibt es eine Möglichkeit, diese Liste zusammenzuführen und sie mithilfe der Anweisung linq abzufragen, um die spezifischen Eigenschaften als separate Liste zurückzugeben? Bitte helfen.

Struktur des Objekts ist wie folgt:

Report 
{ 
    int id, 
    datetime reportDate, 
    enum Status, 
    string text 
}; 

Newsletter 
{ 
    int id, 
    datetime newsletterDate, 
    string Status, 
    string text 
}; 
+1

Gibt es einen Weg, um sie zu verbinden? Haben sie eine gemeinsame Eigenschaft? – Aliostad

+0

Interessanteste Poinht. Bis jetzt ist die Antwort JA; DAS IST MÖGLICH - theoretisch. Keine Ahnung, wie du es hier machen würdest, weil ich nicht einmal sicher bin, ob sie eine ähnliche Struktur haben. – TomTom

+0

CreatedBy -Eigenschaft ist gemeinsam für beide – NewBie

Antwort

6
var items = 
     reportList.Select(x => new { x.Id, x.Date, x.Status, x.text }) 
     .Concat(
     newsList.Select(x => new { x.Id, x.Date, x.Status, x.text })); 

aktualisieren, den Status Eigenschaften entzerren:

var items = 
     reportList.Select(x => new { x.Id, x.Date, Status = x.Status.ToString(), x.text }) 
     .Concat(
     newsList.Select(x => new { x.Id, x.Date, Status, x.text })); 
+0

Es gibt einige Unterschiede in der Eigenschaft Status in beiden Objekten. Ich muss das in eine Zeichenfolge konvertieren. Wie kann ich das innerhalb des anonymen Objekts tun? – NewBie

+0

Hinweis: Übernehmen Sie Union, da anscheinend keine Anforderung zum Entfernen von Duplikaten besteht. –

+0

@NewBie - siehe Update. –

4

Unter der Annahme, dass sowohl die Liste der gemeinsamen Spalten enthält und zwischen ihnen Anwendung kommen ..

Sie können aply verbinden und dann die Daten erhalten, wie unten

var data = form a in lista 
join b in listb on 
a.id equals b.id 
select new {id=a.id, Date= b.Date, Status=a.Sttus, text=b.Text}; 

finden Bild der Verbindungsstelle zwischen zwei Tisch Benutzer und userclient

prüfen ganzen Artikel: Case 4 - JOINING TWO TABLE

enter image description here

4
var reps = reposts.Select(r => new { Id = r.Id, Date = r.Date, Status = r.Status, Text = r.Text}); 
var news = newsletters.Select(n => new { Id = r.Id, Date = r.Date, Status = r.Status, Text = r.Text}); 
var result = reps.Union(news); 
3
var query = reports.Select(x => new { x.Id, x.Date, Status = Enum.GetName(typeof(Status), x.Status), x.Text }) 
.Union(news.Select(x => new { x.Id, x.Date, x.Status, x.Text })); 
+0

Das wird im obigen Fall nicht funktionieren. Es gibt einen Fehler wegen der fehlenden Übereinstimmung in den Typen der Eigenschaften zurück. – NewBie

+0

Es zeigt einen Fehler "Ungültiger anonymer Typ Deklarator" – NewBie

+0

Ihre und Henks Antworten sind die gleichen. Ich habe noch einen Zweifel. Stimmt der Eigenschaftsname im Selektorteil überein? Der Name meiner Eigenschaft für 'ID' unterscheidet sich in beiden Objekten. Der Typ ist gleich. – NewBie

Verwandte Themen