Z tego, co rozumiem z dokumentacji SelectMany, można go użyć do stworzenia (spłaszczonej) sekwencji relacji 1-wiele.
Mam następujące zajęcia
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; }
}
Następnie próbuję ich użyć, używając składni wyrażenia zapytania w ten sposób
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);
To daje mi to, czego potrzebuję.
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
Zakładam, że przekłada się to na użycie metody SelectMany, gdy nie używa się składni wyrażenia zapytania?
Tak czy inaczej, próbuję obejść się za pomocą SelectMany. Więc nawet jeśli moje powyższe zapytanie nie jest tłumaczone na SelectMany, biorąc pod uwagę dwie klasy i pozorowane dane, czy ktoś mógłby mi podać zapytanie linq, które używa SelectMany?