C# 创建IEnumerable<;对象>;从自定义属性计数

C# 创建IEnumerable<;对象>;从自定义属性计数,c#,wpf,mvvm,C#,Wpf,Mvvm,如果这是一个重复的问题,我会向你道歉,但我不知道如何找到解决办法 在当前情况下,有一些称为“需求”的对象,列在称为“需求”的“需求”类型的IEnumerable中,它们具有不同的属性。在某些方法中,从这些属性中的一个生成一个列表,然后根据出现的数量进行分组。这看起来像: this.AuthorList = this.Requirements.GroupBy(x => x.Author) .Select(x => string.Fortmat("{0} amoun

如果这是一个重复的问题,我会向你道歉,但我不知道如何找到解决办法

在当前情况下,有一些称为“需求”的对象,列在称为“需求”的“需求”类型的IEnumerable中,它们具有不同的属性。在某些方法中,从这些属性中的一个生成一个列表,然后根据出现的数量进行分组。这看起来像:

this.AuthorList = this.Requirements.GroupBy(x => x.Author)
           .Select(x => string.Fortmat("{0} amount {1}", x.Key, x.Count()));
这也意味着当前IEnumerable是字符串类型

我想做的是,将{0}和{1}松散地放入1 IEnumerable记录中,这样我就可以在视图中用{Binding}提取它们,以正确地对齐它们,从而创建一个愉快的UI

我想我必须创建一些新的属性,或者把它们放在一个列表中,但我不知道在哪里可以找到我该如何去做。欢迎任何帮助


编辑以希望创建更清晰的内容

创建一个新类来保存您的数据:

public class AuthorCount
{
    public string Name { get; set; }
    public int Count { get; set; }
}
并计划:

AuthorList = this.Requirements.GroupBy(x => x.Author)
    .Select(x => new AuthorCount {Name = x.Key, Count = x.Count()})
    .ToList();

AuthorList
现在包含
IEnumerable
,您可以绑定到
Name
Count

创建一个新类来保存数据:

public class AuthorCount
{
    public string Name { get; set; }
    public int Count { get; set; }
}
并计划:

AuthorList = this.Requirements.GroupBy(x => x.Author)
    .Select(x => new AuthorCount {Name = x.Key, Count = x.Count()})
    .ToList();

AuthorList
现在包含
IEnumerable
,您可以绑定到
Name
Count
您在这里的选项很多。您可以使用匿名类型(但如果您计划在执行方法之外使用此数据结构,则需要执行其他操作):

或者,您可以使用
元组
(但如果您希望其他人能够真正理解您的代码,我建议不要使用该元组):

然后只需选择该类型:

...

.Select(x => new RequirementCount { Label = x.Key, Count = x.Count() });

...

你在这里有很多选择。您可以使用匿名类型(但如果您计划在执行方法之外使用此数据结构,则需要执行其他操作):

或者,您可以使用
元组
(但如果您希望其他人能够真正理解您的代码,我建议不要使用该元组):

然后只需选择该类型:

...

.Select(x => new RequirementCount { Label = x.Key, Count = x.Count() });

...

由于我已经有3种结构需要这种解决方案,您认为哪一种在插件应用程序中最“可接受”,因为它们似乎都不是最佳的?我假设创建3个类“只是为了计数”可能有点过分了,而元组会影响可读性,anontype也不会达到它需要的视图。我想说的是,只使用元组并很好地记录它。可能更好的方法(如果标签是唯一的)是使用
.ToDictionary
。因为我已经有3种结构需要此解决方案,您认为哪一种在插件应用程序中最“可接受”,因为它们似乎都不是最理想的?我假设创建3个类“只是为了计数”可能有点过分了,而元组会影响可读性,anontype也不会达到它需要的视图。我想说的是,只使用元组并很好地记录它。可能更好的方法(如果标签是唯一的)是使用
.ToDictionary
。如果我选择创建类来解决这个问题,在传统的MVVM构造中,我是否必须创建这个类(因此每次遇到这个类时,都会创建另一个类)在一个独立的虚拟机中?如果我选择创建类来解决这个问题,在传统的MVVM构造中,我是否必须在一个独立的虚拟机中创建这个类(因此每次我遇到这个,另一个类)?