2016-08-14 4 views
1

enter image description hereWie doppelte Datensätze aus LINQ-Abfrage

Dies ist, wie meine Datenbank aussieht und mein Code zu entfernen, die alle Daten aus der Datenbank von Whid

public ActionResult Details(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     var viewModel = 
      (from Wh in db.Werehouses 
      join WhK in db.WerehouseKeys on Wh.WhID equals WhK.WhID 
      join Itm in db.Items on Wh.WhID equals Itm.WhID 
      where Wh.WhID == id 
      select new WerehouseViewModel { Werehouse = Wh, WerehouseKey = WhK, Item = Itm }); 
     if (viewModel == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(viewModel); 
    } 

Aber wenn ich es will zeigen, in View bekommt Es zeigt doppelte Schlüssel (z. B. Schlüssel 1, Schlüssel 2, Schlüssel 3, Schlüssel 1, Schlüssel 2, Schlüssel 3 usw.) und Artikel (Artikel 1, Artikel 2, Artikel 1, Artikel 2 usw.) an. Wie kann ich Dubletten aus der Abfrage löschen?

Das ist mein Ansichtsmodell

public class WerehouseViewModel 
{ 
    public Werehouse Werehouse { get; set; } 
    public WerehouseKey WerehouseKey { get; set; } 
    public Item Item { get; set; } 
} 
+0

Nun, Fügen Sie 'Werehouses' (1) zu 2 verschiedenen (vielen) Entitäten, so ist das Ergebnis ein kartesisches Produkt der verwandten "Werehäuser" und "Artikel" Aufzeichnungen. Möglicherweise müssen Sie das Ansichtsmodell ändern und Gruppen-Joins verwenden. –

+0

Vielen Dank für Ihren Rat, können Sie mir bitte zeigen, wie würden Sie es bearbeiten? – Cezar

+0

Ich würde "WerehouseViewModel" so etwas wie "Public Werehouse Werehouse" machen; einstellen; } öffentliche Liste WerehäuserKeys {bekommen; einstellen; } öffentliche Liste Elemente {get; einstellen; } ' –

Antwort

0

Ich habe keine Ahnung, wie man es visualisieren gehen, aber Sie haben einen Master Werehouse Einheit mit 2 Detail WerehouseKey und Item Einheiten, die miteinander nichts zu tun haben, so kann nicht in einem einzelnen Datensatz wie dem aktuellen Ansichtsmodell kombiniert werden.

Der einzige Weg, ich sehe solche Daten darzustellen, ist der Ansicht, Modell zu ändern:

public class WerehouseViewModel 
{ 
    public Werehouse Werehouse { get; set; } 
    public List<WerehouseKey> WerehouseKeys { get; set; } 
    public List<Item> Items { get; set; } 
} 

und füllen es Group Join s unter Verwendung von zwei:

var viewModel = 
    (from Wh in db.Werehouses 
    join WhK in db.WerehouseKeys on Wh.WhID equals WhK.WhID into keys 
    join Itm in db.Items on Wh.WhID equals Itm.WhID into items 
    where Wh.WhID == id 
    select new WerehouseViewModel 
    { 
     Werehouse = Wh, 
     WerehouseKeys = keys.ToList(), 
     Items = items.ToList() 
    }) 
    .FirstOrDefault(); 
+0

Das ist die Antwort auf meine Frage. Ich danke dir sehr! – Cezar

Verwandte Themen