Ich habe eine Liste von Adressen in einem übergeordneten Objekt namens Branch. Branch kann diese Adressen definiert haben oder nicht und ich muss eine flache Hierarchie oder diese Verzweigung und Adresse erhalten.LINQ: Abrufen der Parent-Objekteigenschaften und einer einzelnen untergeordneten Eigenschaft als flache Struktur
var x = from p in CurrentBranchList
where p.ScheduledForDeletion == false
from c in p.Addresses
where c.ScheduledForDeletion == false && c.AddressTypeId == 3
select new
{
BranchId = p.BranchId,
Name = p.Name,
Address = (c == null) ? "" : c.Address1 + " " + c.Address2,
City = (c == null) ? "" : c.City,
State = (c == null) ? 0 : c.StateId
};
Die oben ist, was ich versuchte, aber wenn die Adresse ich keine Informationen über die Filiale erhalten fehlt ... Ich bin immer noch versuchen, herauszufinden, wie man diese mit Linq in Gang zu bringen. In SQL hätte ich mich einfach den beiden Tabellen angeschlossen, um diese Info zu bekommen.
Kann mir jemand dabei helfen ... Ich bin sicher, es ist eine ziemlich einfache Sache. Vielen Dank. PS. Ich weiß, das ist sehr ähnlich zu (Linq query to return a flatened list of parent child), aber in diesem ein Kind existiert immer.
EDIT - Arbeitslösung Das folgende ist Code, der für mich zu arbeiten schien. Ich kann nicht gegen eine Datenbank für die Quelle gehen, weil die in der CurrentBranchList enthaltenen Objekte im Speicher bearbeitet werden und die Persistenz in einer einzigen Operation ausgeführt wird.
var x = from p in CurrentBranchList
join c in CurrentBranchList.SelectMany(b => b.Addresses)
on p.EntityId equals c.EntityId into ur
where p.ScheduledForDeletion == false
from u in ur.DefaultIfEmpty()
select new
{
BranchId = p.BranchId,
Name = p.Name,
Address = (u == null) ? "" : u.Address1 + " " + u.Address2,
City = (u == null) ? "" : u.City,
State = (u == null) ? 0 : u.StateId
};
Vielen Dank für Ihre Hilfe. Diese Links haben mir wirklich geholfen zu verstehen, was passieren musste.
Ich habe auch versucht Daniel Brückner Lösung und das scheint eleganter zu sein und weniger tippen erfordern. :-) Scheint in den paar Szenarien, die ich ausprobiert habe, zu arbeiten.
So sieht das aus.
var xx = CurrentBranchList.SelectMany(b => b.Addresses.DefaultIfEmpty().Select(a => new
{
BranchId = b.BranchId,
Name = b.Name,
Address = (a == null) ? "" : a.Address1 + " " + a.Address2,
City = (a == null) ? "" : a.City,
State = (a == null) ? 0 : a.StateId
}));