创建一个ienumerableobject>从自定义属性计数

本文关键字:自定义属性 ienumerableobject 一个 创建 | 更新日期: 2023-09-27 18:01:24

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

在当前的情况下,有一些被称为"需求"的对象,列在名为"需求"类型的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。

我认为我必须创建某种新属性,或者将它们放在List<>中,但我不知道在哪里可以找到如何做到这一点。欢迎任何帮助。

编辑,希望能更清晰

创建一个ienumerableobject>从自定义属性计数

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

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<AuthorCount>,您可以绑定NameCount

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

...
.Select(x => new { Author = x.Key, Amount = x.Count() });
...

或者,您可以使用Tuple<String, Int32>(尽管如果您希望其他人实际上能够理解您的代码,我建议不要这样做):

...
.Select(x => new Tuple<String,Int32>(x.Key, x.Count()));
...

或者,您可以定义一个不太通用的数据结构,更合适地传达您所提供的信息的含义:

public class RequirementCount {
    public String Label { get; set; }
    public Int32 Count { get; set; }
} 

然后选择这个类型:

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