J'essaie de créer un arbre d'expression de manière dynamique.Linq jointure interne de regroupement
Laissez Asume que j'ai deux classes simples:
class CustomerType
{
public int Id { get; set; }
public string Name { get; set; }
public OrderType[] Orders { get; set; }
}
class OrderType
{
public int Id { get; set; }
public DateTime Date { get; set; }
public decimal Price { get; set; }
}
.. et types d'entités correspondants sans les associations (donc, je dois utiliser se joindre à une coutume).
J'ai besoin de remplir une liste de clients avec les ordres correspondants. Je sais qu'il y a deux types de jointures dans Linq: Left Outer Join et Left Inner Join.
Ainsi, en utilisant une gauche OUTER JOIN Je peux écrire la requête suivante (pour simplifier, je vais illustrer la question en utilisant une expression Linq au lieu d'un code de générateur de ExpressionTree personnalisé):
var query = from c in db.Customers
join o in db.Orders on c.Id equals o.CustomerId into g
select new AccountType()
{
Id = c.Id,
Name = c.Name,
Orders = g
};
Ainsi, une propriété de commandes de l'objet AccountType contiendra toutes les commandes correspondantes. Je ne comprends pas comment je peux utiliser une jointure interne gauche pour obtenir le même résultat avec la filtration, en fonction des champs de la table des ordres (par exemple, je dois interroger tous les clients qui ont une commande avec le prix plus élevé que 100.00):
var query = from c in db.Customers
join o in db.Orders on c.Id equals o.CustomerId
where o.Price > 100.00
select new AccountType()
{
Id = c.Id,
Name = c.Name,
Orders = ???
};
Merci pour l'aide!
Ce que vous appelez une « jointure externe gauche » est en fait appelé une "jointure de groupe" à Linq. Linq n'est pas SQL et les concepts SQL ne se traduisent pas directement en Linq. –
Merci pour la correction. – junglit