Por lo que entiendo de la documentación de SelectMany, se podría usar para producir una secuencia (aplanada) de una relación 1-many.Linq - SelectMany Confusion
tengo siguientes clases
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; }
}
entonces trato de usarlos utilizando la sintaxis de expresión de consulta al igual que
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);
Esto le da a lo que necesito.
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
Supongo que esto se traduce en el uso del método SelectMany cuando no se utiliza la sintaxis de la expresión de consulta.
De cualquier manera, estoy tratando de entender cómo se usa SelectMany. Entonces, incluso si mi consulta anterior no se traduce a SelectMany, dadas las dos clases y los datos simulados, ¿podría alguien proporcionarme una consulta de linq que use SelectMany?
Ver [parte 41] (http://msmvps.com /blogs/jon_skeet/archive/2011/01/28/reimplementing-linq-to-objects-part-41-how-query-expressions-work.aspx) de la [serie Edulinq] de Jon Skeet (http://msmvps.com) /blogs/jon_skeet/archive/tags/Edulinq/default.aspx). Explica el proceso de traducción de la expresión de consulta. –
Pensando en ello, consulte también [Parte 9: SelectMany] (http://msmvps.com/blogs/jon_skeet/archive/2010/12/27/reimplementing-linq-to-objects-part-9-selectmany.aspx) :) –
La serie Edulinq de John Skeet ya está disponible [aquí] (http://codeblog.jonskeet.uk/category/edulinq/). –