我需要帮助来理解 GroupJoin 的第四个参数。据我所知,到目前为止 GroupJoin 有 4 个参数: (1, 2) - 第一个是辅助列表,第二个参数是一个 Func,它从第一个对象类型返回键,换句话说,在这种情况下从第一个列表返回(人们)。(3, 4) 一个 Func,在本例中返回第二个列表中的第二个对象类型的键(项目),以及一个将分组对象与组本身一起存储的函数(我无法理解这部分的代码) . 考虑到这一点并具有以下代码:
var products = new Product[]
{
new Product { Id = 1, Type = "Phone", Model = "OnePlus", Price = 1000 },
new Product { Id = 2, Type = "Phone", Model = "Apple", Price = 2000 },
new Product { Id = 3, Type = "Phone", Model = "Samsung", Price = 1500 },
new Product { Id = 4, Type = "TV", Model = "Samsung 32", Price = 200 },
};
var people = new Person[]
{
new Person { Id = 1, Name = "Ivan Ivanov", Money = 150000 },
new Person { Id = 2, Name = "Dragan Draganov", Money = 250000 },
new Person { Id = 3, Name = "Ivelin Ivelinov", Money = 350000
}
};
var items = new Item[]
{
new Item { PersonId = 1, ProductId = 1, Amount = 1 },
new Item { PersonId = 1, ProductId = 4, Amount = 1 },
new Item { PersonId = 1, ProductId = 5, Amount = 1 },
new Item { PersonId = 1, ProductId = 7, Amount = 1 },
new Item { PersonId = 2, ProductId = 2, Amount = 1 },
};
询问:
var productOwnerList = people
.GroupJoin(
items,
o => o.Id,
i => i.PersonId,
(o, i) => new <--- (**)
{
Person = o,
Products = i
.Join(products,
o1 => o1.ProductId,
i2 => i2.Id,
(o1, i2) => i2) <--- (*)
.ToArray()
})
.ToArray();
顺便提一下,我只发布了几行数据。我需要帮助来理解 join 方法的第四个参数在这里执行的是什么 -> (*) (将分组对象与组本身一起存储)?当我看到结果时,我看到它把所有人员 ID 与产品密钥关联起来,并根据项目列表(一对多)加入两个列表。但我无法理解这一行的确切含义 (o1, o2) => i2)。很明显在做什么(将所有与个人 ID 关联的项目放入每个人的数组 (items[]) 中。但是这里的“幕后”是什么?还有一个关于 (**) 这一行的问题,它正在创建新的对象,这是一个匿名类,如果不是,它是什么。
12345678_0001
相关分类