我需要幫助來理解 GroupJoin 的第四個參數(shù)。據(jù)我所知,到目前為止 GroupJoin 有 4 個參數(shù): (1, 2) - 第一個是輔助列表,第二個參數(shù)是一個 Func,它從第一個對象類型返回鍵,換句話說,在這種情況下從第一個列表返回(人們)。(3, 4) 一個 Func,在本例中返回第二個列表中的第二個對象類型的鍵(項目),以及一個將分組對象與組本身一起存儲的函數(shù)(我無法理解這部分的代碼) . 考慮到這一點并具有以下代碼: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(); 順便提一下,我只發(fā)布了幾行數(shù)據(jù)。我需要幫助來理解 join 方法的第四個參數(shù)在這里執(zhí)行的是什么 -> (*) (將分組對象與組本身一起存儲)?當(dāng)我看到結(jié)果時,我看到它把所有人員 ID 與產(chǎn)品密鑰關(guān)聯(lián)起來,并根據(jù)項目列表(一對多)加入兩個列表。但我無法理解這一行的確切含義 (o1, o2) => i2)。很明顯在做什么(將所有與個人 ID 關(guān)聯(lián)的項目放入每個人的數(shù)組 (items[]) 中。但是這里的“幕后”是什么?還有一個關(guān)于 (**) 這一行的問題,它正在創(chuàng)建新的對象,這是一個匿名類,如果不是,它是什么。
1 回答

12345678_0001
TA貢獻(xiàn)1802條經(jīng)驗 獲得超5個贊
第四個參數(shù)——映射到文檔中的第五個參數(shù)(因為第一個參數(shù)是擴(kuò)展方法調(diào)用的目標(biāo))只是結(jié)果選擇器。這是一個接受兩個參數(shù)的函數(shù):第一個是“外部”序列的一個元素(在你的例子中是數(shù)組),第二個是“內(nèi)部”序列(在你的例子中是數(shù)組)的元素序列,它們具有相同的元素鍵作為外部元素。該函數(shù)應(yīng)返回一個“結(jié)果”元素,方法調(diào)用的總體結(jié)果是這些結(jié)果的序列。people
items
每個“外部”元素都會調(diào)用一次該函數(shù),因此您將擁有:
第一次調(diào)用:人員 ID 1,以及 ID 為 1、4、5、7 的產(chǎn)品
第二次調(diào)用:人 ID 2,ID 2 的產(chǎn)品
第三次調(diào)用:人員 ID 3 和一個空的產(chǎn)品序列
您的查詢很復(fù)雜,因為您正在為結(jié)果使用匿名類型,并使用另一個查詢構(gòu)造匿名類型的實例。這是一個可能有助于澄清的更簡單的查詢:
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 關(guān)注
- 171 瀏覽
添加回答
舉報
0/150
提交
取消