LINQ che unisce due tabelle
-
03-07-2019 - |
Domanda
Ho due tabelle che dicono A e B. A cols sono GUID, someintVar, someMoreIntvar B col sono GUID, someItemNO, SomeItemDesc
Ora per un GUID avrò solo una riga nella Tabella A. Ma posso avere più righe per lo stesso GUID. Ora voglio interrogare il database in base al GUID e selezionare i valori in una classe. Questa classe avrà un elenco che conterrà diverse righe provenienti dalla seconda tabella. Come posso farlo?
In questo momento sto ottenendo molti elementi nel risultato in base a quante righe ci sono nella seconda tabella per quel 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.
};
Soluzione
Non testato, ma che ne dici di riscriverlo un po ':
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]
}
In alternativa, potresti forse raggruppare ...
Altri suggerimenti
Supponendo di avere una relazione di chiave esterna impostata tra A e B su GUID. (E se non lo fai, lo schema db è rotto e deve essere corretto)
var itemColl = from p in db.A
where p.CardID == "some GUID"
select new
{
p.CardID,
p.secondCol,
p.ThirdCol,
Items = p.Bs
}
Supponendo che ciò accada nel metodo NEW o LOAD della tua classe ... ecco come lo farei ...
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