如果事实证明这是一个重复的问题,我会道歉,但我不知道如何找到解决方案。
在目前的情况下,有一些名为'要求'的对象,列在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<>中,但我不知道在哪里可以找到我如何去做只是。欢迎任何帮助。
编辑希望创造更多清晰度
答案 0 :(得分:2)
创建一个新类来保存您的数据:
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>
,您可以绑定到Name
和Count
。
答案 1 :(得分:0)
您的选择很多。您可以使用匿名类型(但如果您计划在执行方法之外使用此数据结构,则需要执行其他操作):
...
.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() });
...