LINQ Verbinden von zwei Tabellen
-
03-07-2019 - |
Frage
Ich habe zwei Tabellen sagen A und B. Ein cols sind GUID, someintVar, someMoreIntvar B col sind GUID, someItemNO, SomeItemDesc
Jetzt für eine GUID werde ich nur eine Zeile in Tabelle A, aber ich mehrere Zeilen für die gleiche GUID haben kann. Jetzt möchte ich die Datenbank abzufragen, basierend auf GUID und wählen Sie Werte in einer Klasse. Diese Klasse wird eine Liste hat, die verschiedenen Reihen halten wird aus der zweiten Tabelle kommen. Wie kann ich es tun?
Right Now viele Elemente im Ergebnis bin ich immer auf, wie viele Zeilen in der zweiten Tabelle gibt für die GUID.
var itemColl = from p in db.A
join item in db.B on p.CardID equals item.CardID
where p.CardID == "some GUID"
select new
{
p.CardID,
p.secondCol,
p.ThirdCol,
item.ItemNo // How to add them in a collection or list.
};
Lösung
Unested, aber wie wäre es ein bisschen neu zu schreiben:
var itemColl = from p in db.A
where p.CardID == "some GUID"
select new {
p.CardID,
p.secondCol,
p.ThirdCol,
Items = db.B.Where(b=>b.CardID==p.CardID)
//.Select(b=>b.ItemNo) [see comments]
}
Alternativ könnten Sie vielleicht Gruppe ...
Andere Tipps
Sie haben eine Fremdschlüsselbeziehung zwischen A und B auf GUID einrichten Unter der Annahme. (Und wenn Sie nicht über DB-Schema ist kaputt und muss repariert werden)
var itemColl = from p in db.A
where p.CardID == "some GUID"
select new
{
p.CardID,
p.secondCol,
p.ThirdCol,
Items = p.Bs
}
Unter der Annahme, dies wird in der neuen oder LOAD-Methode der Klasse passiert ... das ist, wie ich es tun würde ...
dim myAItem AS A = (from x in db.As WHERE x.CardID == MyGUIDValue).SelectSingleOrDefault
' Assign Variables Here
Me.AValue1 = myAItem.FromDbValue1
dim itemColl = (from b in db.Bs on b == MyGUIDValue).ToList
me.ItemList = New List(of MySubClass)
For each bItem as B in itemColl
dim item as New MySubClass
'Assign Variables Here, ex: item.Value1 = bItem.MyDbValue1
me.ItemList.Add(item)
Next