Я парень на C #, но Linq - это Linq, поэтому я решила, что сделаю удар.Я смог сопоставить ваши результаты, поместив в ваш красный раздел следующее:
Dim outStuff = From t In Products.SelectMany(Function(p) p.tags)
Group By tagName = t.Name
Into g = Group, Count()
Order By Count Descending
И затем я использовал
For Each t In outStuff
Console.WriteLine("Tag: {0} - Count: {1}", t.tagName, t.Count)
Next
, чтобы сделать вывод.
IУверен, что это не самый изящный или элегантный VB, и вы, вероятно, можете улучшить Linq, чтобы он был немного красивее, но это должно стать хорошим началом для вас.
Пример кода в вашем вопросе помогмногое сделать для этого.
Для быстрого объяснения, если вы не знакомы с SelectMany или Group By, они делают несколько разных и чрезвычайно полезных вещей.
SelectMany работает следующим образомВыберите, за исключением того, что при применении к свойству коллекции содержимое всех свойств коллекции выравнивается и возвращается как одна коллекция соответствующего типа, а не возвращается как коллекция коллекций.В этом случае он получает все теги из всех продуктов и помещает их в одну коллекцию для работы.
Group By делает нечто противоположное, берет большую плоскую группу и превращает ее вколлекция коллекций, сгруппированных в соответствии с обозначенными критериями (т. имя в данном случае).