2017-03-21 5 views
1

Ich habe zwei Sitzungen in meinem Controller, sessCash und sessFuel.Können wir mit Linq Union zwei Sitzungen in MVC kombinieren?

Welche beide die Werte aus zwei verschiedenen Tabellen, tblCash und tblFuel, mit ähnlichen Feldern gespeichert.

tblCash

--------------------------- 
Id | Type  | Price | 
----+------------+--------+ 
c1 | Electronic | 200 | 
c2 | Water  | 50  | 
--------------------------- 

tblFuel

-------------------- 
Id | Type | Price | 
----+------+-------+ 
f1 | Fuel | 5  | 
f2 | Fuel | 10 | 
-------------------- 

Die tblFuel ist getrennt von tblCash für künftige Abfragen.

Ich möchte zu einer Ansicht in meinem index.cshtml kombinieren, aber ohne Union in SQL-Abfrage verwenden, sondern mit linq Union auf meinem Projekt.

Wie kann ich das tun?

Ich habe diese versucht

sessCash.OrderBy(x => x.Type).Select(x => new { x.Id, x.Type, x.Price}).Union(sessFuel(...//I'm not sure how to continue 

Dank.

+2

Wählen Sie die gleichen Parameter wie für die erste (Cash) Projektion '.Union (sessFuel.Select (f => neu {Id = f.Id, Typ = f.Typ, Preis = f.Preis}))'. – Jasen

+2

Sie möchten jedoch wahrscheinlich in ein Ansichtsmodell projizieren, anstatt anonyme Objekte zu verwenden, wenn Sie die Daten in einer Ansicht verwenden. –

+0

@StephenMuecke Ja, jedes Mal, wenn ich Codes wie @Jasen benutze, hat es einen Fehler 'kann Typ nicht implizit konvertieren 'system.collections.generic.list anonymer Typ # 1'' – JTR

Antwort

1

Da tblCash und tblFuel gibt verschiedene Arten (auch wenn sie identische Eigenschaftsnamen enthalten), benötigen Sie einen View-Modell erstellen und projizieren Sie fragt in eine Sammlung von dieser Ansicht Modell

public class MyVM 
{ 
    public int Id { get; set; } 
    public string Type { get; set; } // or enum? 
    public decimal Price { get; set; } 
} 

und dann die Abfrage wird

var model = sessCash.OrderBy(x => x.Type).Select(x => new MyVM 
{ 
    Id = x.Id, 
    Type = x.Type, 
    Price = x.Price 
}).Union(sessFuel.OrderBy(x => x.Type).Select(x => new MyVM 
{ 
    Id = x.Id, 
    Type = x.Type, 
    Price = x.Price 
}); 
return view(model); 

und in der Ansicht

@model IEnumerable<MyVM>