gpt4 book ai didi

c# - Linq - SelectMany 混淆

转载 作者:IT王子 更新时间:2023-10-29 03:38:48 24 4
gpt4 key购买 nike

据我从 SelectMany 的文档中了解到,可以使用它来生成一对多关系的(扁平化)序列。

我有以下类(class)

  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; }
}

然后我尝试像这样使用查询表达式语法来使用它们

  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);

这满足了我的需要。

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

我假设这意味着在不使用查询表达式语法时使用 SelectMany 方法?

无论哪种方式,我都在尝试使用 SelectMany。因此,即使我的上述查询没有转换为 SelectMany,鉴于这两个类和模拟数据,有人可以为我提供一个使用 SelectMany 的 linq 查询吗?

最佳答案

这是您使用 SelectMany 的查询,完全按照您的示例建模。相同的输出!

        var customerOrders2 = customers.SelectMany(
c => orders.Where(o => o.CustomerId == c.Id),
(c, o) => new { CustomerId = c.Id, OrderDescription = o.Description });

第一个参数将每个客户映射到一组订单(完全类似于您已有的“where”子句)。

第二个参数将每个匹配对 {(c1, o1), (c1, o2) .. (c3, o9)} 转换为一个新类型,我已将其与您的示例相同。

所以:

  • arg1 将基本集合中的每个元素映射到另一个集合。
  • arg2(可选)将每对转换为新类型

生成的集合与您在原始示例中所期望的一样平坦。

如果您要省略第二个参数,您最终会得到与客户匹配的所有订单的集合。就是这样,Order 对象的平面集合。

使用它需要很多时间来适应,有时我仍然难以理解它。 :(

关于c# - Linq - SelectMany 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com