D'après ce que je comprends de la documentation de SelectMany, on pourrait l'utiliser pour produire une séquence (aplatie) d'une relation 1-many.
J'ai les classes suivantes
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
class Order
{
public int Id { get; set; }
public int CustomerId { get; set; }
public string Description { get; set; }
}
J'essaie ensuite de les utiliser en utilisant la syntaxe des expressions de requête comme suit
var customers = new Customer[]
{
new Customer() { Id=1, Name ="A"},
new Customer() { Id=2, Name ="B"},
new Customer() { Id=3, Name ="C"}
};
var orders = new Order[]
{
new Order { Id=1, CustomerId=1, Description="Order 1"},
new Order { Id=2, CustomerId=1, Description="Order 2"},
new Order { Id=3, CustomerId=1, Description="Order 3"},
new Order { Id=4, CustomerId=1, Description="Order 4"},
new Order { Id=5, CustomerId=2, Description="Order 5"},
new Order { Id=6, CustomerId=2, Description="Order 6"},
new Order { Id=7, CustomerId=3, Description="Order 7"},
new Order { Id=8, CustomerId=3, Description="Order 8"},
new Order { Id=9, CustomerId=3, Description="Order 9"}
};
var customerOrders = from c in customers
from o in orders
where o.CustomerId == c.Id
select new
{
CustomerId = c.Id
, OrderDescription = o.Description
};
foreach (var item in customerOrders)
Console.WriteLine(item.CustomerId + ": " + item.OrderDescription);
Cela donne ce dont j'ai besoin.
1: Order 1
1: Order 2
1: Order 3
1: Order 4
2: Order 5
2: Order 6
3: Order 7
3: Order 8
3: Order 9
Je suppose que cela se traduit par l'utilisation de la méthode SelectMany lorsqu'on n'utilise pas la syntaxe d'expression de requête ?
Quoi qu'il en soit, j'essaie de me faire une idée de l'utilisation de SelectMany. Donc, même si ma requête ci-dessus ne se traduit pas en SelectMany, étant donné les deux classes et les données fictives, quelqu'un pourrait-il me fournir une requête linq qui utilise SelectMany ?
3 votes
Voir partie 41 de Jon Skeet Série Edulinq . Il explique le processus de traduction de l'expression de la requête.
2 votes
En y réfléchissant, voir aussi Partie 9 : SelectMany :)
4 votes
La série Edulinq de John Skeet est désormais disponible. ici .