Cla*_*ein 13 c# linq asp.net linq-to-objects
我有一个对象,它有许多属性但只有两个需要担心的是:
myobject.ID其是int
myobject.Names其是HashSet
然后我有List一些看起来像这样的对象:
List<myobject>
Run Code Online (Sandbox Code Playgroud)
我使用Linq将一些数据转换为转发器,但我不知道如何获取名称列表以及它们出现的频率.
想要使用Linq以避免必须遍历数据.
正如我的标签应该显示的那样,这是一个使用C#的ASP.NET解决方案.
一些澄清:
假设我的列表中只有三个项目:项目1中有John,Fred,Jack的名字.第2项有John,Fred,Joe的名字.第3项约翰的名字.
我试图返回以下内容:John - 3 Fred - 2 Jack - 1 Joe - 1
另外,作为一个注释,我熟悉必须为我的对象编写我自己的比较器,我只是错过了我的想法中整体解决方案的"如何".
jas*_*son 21
以下是我如何理解您要解决的问题.你有一个myobjects 列表.每个myobject有一个称为属性Names是一个HashSet的stringS(即,HashSet<string>).你想算的次数每次string出现在一些myobject.Names出现在所有myobject.Names.也就是说,你有
"Alice", "Bob", "Charlie"
"Alice", "Bob", "Donald"
"Alice", "Donald", "Ernie"
Run Code Online (Sandbox Code Playgroud)
三个myobject.Names,你想看到
"Alice", 3
"Bob", 2
"Charlie", 1
"Donald", 2
"Ernie", 1
Run Code Online (Sandbox Code Playgroud)
如果是这样:
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);
}
Run Code Online (Sandbox Code Playgroud)
我不知道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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20127 次 |
| 最近记录: |