In LINQ alle entità, pensare in termini di relazioni anziché di join SQL. Quindi, l'equivalente letterale di un esterno SQL join su un'entità Person
con uno a zero o un rapporto di CustomerInfo
sarebbe:
var q = from p in Context.People
select new
{
Name = p.Name,
IsPreferredCustomer = (bool?)p.CustomerInfo.IsPreferredCustomer
};
L2E sarà confluire il join, in modo che se CustomerInfo è nullo, allora l'intera espressione valuta a null. Da qui il cast a un bool nullable, perché il tipo inferito di bool non annullabile non può contenere quel risultato.
Per uno-a-molti, si vuole in genere una gerarchia, piuttosto che una, SQL in stile set di risultati piatta:
var q = from o in Context.Orders
select new
{
OrderNo = o.OrderNo,
PartNumbers = from od in o.OrderDetails
select od.PartNumber
}
Questo è come un sinistro unirsi nella misura in cui è ancora ottenere gli ordini con nessun dettaglio , ma è un grafico come OO piuttosto che un set come SQL.
fonte
2009-11-20 14:45:59
Questo è esattamente il tipo di risposta di qualità che stavo cercando. Grazie! –
+1 non è sufficiente per una buona risposta come questa! – Arjang
Grazie per il suggerimento. Quando qualcuno lo spiega così all'improvviso sembra così ovvio che in L2E si pensa alle relazioni tra gli oggetti e non ai tavoli, ma non ci avevo pensato. Una vera rivelazione ... – Quagmire