我需要帮助来理解 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[]) 中。但是这里的“幕后”是什么?还有一个关于 (**) 这一行的问题,它正在创建新的对象,这是一个匿名类,如果不是,它是什么。
1 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
第四个参数——映射到文档中的第五个参数(因为第一个参数是扩展方法调用的目标)只是结果选择器。这是一个接受两个参数的函数:第一个是“外部”序列的一个元素(在你的例子中是数组),第二个是“内部”序列(在你的例子中是数组)的元素序列,它们具有相同的元素键作为外部元素。该函数应返回一个“结果”元素,方法调用的总体结果是这些结果的序列。people
items
每个“外部”元素都会调用一次该函数,因此您将拥有:
第一次调用:人员 ID 1,以及 ID 为 1、4、5、7 的产品
第二次调用:人 ID 2,ID 2 的产品
第三次调用:人员 ID 3 和一个空的产品序列
您的查询很复杂,因为您正在为结果使用匿名类型,并使用另一个查询构造匿名类型的实例。这是一个可能有助于澄清的更简单的查询:
var productOwnerList = people .GroupJoin( items, o => o.Id, i => i.PersonId, (person, items) => $"{person.Id}: {string.Join(",", items.Select(item => item.ProductId))}" .ToArray();
- 1 回答
- 0 关注
- 139 浏览
添加回答
举报
0/150
提交
取消