У меня есть объект, который имеет много свойств, но только два для волнения о:
myobject.ID
который является int
myobject.Names
который является a HashSet
Тогда у меня есть a List
из тех объектов, который смотрит что-то подобное этому:
List<myobject>
Я использую Linq для получения некоторых данных в повторитель, но я не уверен, как получить список Имен и как часто они обнаруживаются.
Хочу использовать Linq, чтобы избежать необходимости циклично выполняться через данные.
Поскольку мои теги должны показать, это - решение ASP.NET с помощью C#.
Некоторое разъяснение:
Позволяет говорят, что у меня есть всего три объекта в моем списке: Объект 1 имеет John, Fred, Jack на его имена. Объект 2 имеет John, Fred, Joe на его имена. Объект 3 имеет John на свои имена.
Я пытаюсь возвратить следующее: John - 3 Fred - 2 Jack - 1 Joe - 1
Кроме того, как примечание я знаком с необходимостью записать мой собственный компаратор для моего объекта, я просто отсутствую 'как к' для полного решения в моих мыслях.
Вот как я понимаю проблему, которую вы пытаетесь решить. У вас есть список миобъектов
. Каждый мой объект
имеет свойство под названием Names
, которое представляет собой HashSet
из string
s (т.е. HashSet
). Вы хотите посчитать количество раз каждой строки
, которая появляется в некоторых myobject.Names
во всех myobject.Names
. То есть, у вас есть
"Alice", "Bob", "Charlie"
"Alice", "Bob", "Donald"
"Alice", "Donald", "Ernie"
в виде трех myobject.Names
и вы хотите увидеть
"Alice", 3
"Bob", 2
"Charlie", 1
"Donald", 2
"Ernie", 1
If so:
var query = list.SelectMany(x => x.Names)
.GroupBy(s => s)
.Select(g => new { Name = g.Key, Count = g.Count() });
foreach(var result in query) {
Console.WriteLine("Name: {0}, Count: {1}", result.Name, result.Count);
}
Я не вижу, какую роль myobject.ID
здесь играет. Пожалуйста, квалифицируйтесь.
var query = yourList
.SelectMany(x => x.Names)
.GroupBy(x => x, (y, z) => new { Name = y, Count = z.Count() });
// and to test...
foreach (var item in query)
{
Console.WriteLine("{0} - {1}", item.Name, item.Count);
}