2016-08-09 62 views
0

如果這會產生重複問題,我將會對優勢表示歉意,但我不知道如何找到解決方案。從自定義屬性計數創建一個IEnumerable <Object>

在當前情況下,有一些名爲'Requirement'的對象,列在名爲Requirements的'Requirement'類型的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}將它們提取出來以正確對齊它們,以創建一個pleasent UI。

我想我必須創建一些新的屬性,或將它們放在列表<>中,但我不知道在哪裏可以找到如何去做這件事。任何幫助將受到歡迎。

編輯以希望創造更清晰

回答

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() }); 

... 
+0

由於我已經有3個需要這種解決方案的構造,你認爲哪一個在插件應用程序中最「可接受」,因爲它們中沒有一個看起來真的是最優的?我假設創建3個'只是數'類可能有點過分,而Tuple會影響可讀性,而anontype不會達到它需要的視圖。 – Ciphra

+0

我會說只是使用Tuple並記錄它。可能更好(如果你的標籤是唯一的)將使用'.ToDictionary '代替。 – Dave

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>,你可以綁定到NameCount

+0

如果我選擇創建的類來解決這個問題,在傳統的MVVM建設,我不得不創建這個類(因此每一次我遇到這個,另一類)在一個單獨的虛擬機? – Ciphra

相關問題