2012-08-27 40 views
1

我返回後續的一些數據:LINQ的重複計數

Model { Guid Id } 

和我的全部項目,int totalCount的一個int。

我想從數據重複計數被返回第1類, 而擁有項目總減去1類計爲2類。

我有以下的LINQ to獲取第1類的計數不同,但是如何將第2類的計數添加到IEnumerable中?

var result = data. 
    GroupBy(x => x.Id). 
    Select(x => new { Category = "1", Value = x.Select(v => v.Id).Distinct().Count() }). 
    GroupBy(x => x.Category). 
    Select(x => new Item { Category = x.Key, Value = x.Sum(y => y.Value) }); 

和Item類有2個成員:類別爲字符串,值爲小數。

謝謝!


編輯: 所以我有後續數據IEnumerable<Model> data,它包含以下數據:

{ Id: 1 } 
{ Id: 2 } 
{ Id: 2 } 
{ Id: 1 } 
{ Id: 3 } 
{ Id: 4 } 

和TOTALCOUNT = 10

我想獲得的重複計數從數據中獲得的Id(在這種情況下爲4)作爲類別1,而totalCount - 不同的項目爲類別2.因此,對於結果,我將有IEnumerableItem具有以下內容:

{ Category: "1", Value: 4 }, { Category: "2", Value: 6 } 

現在我的linq語句只返回{ Category: "1", Value: 4 },我不知道下一步該怎麼做。

+0

我不太明白這個問題。一些簡單的示例數據可能會有幫助在您的代碼中,Count()方法將始終返回1.您處於按「.Id」分組的項目的上下文中。因此,每組只有一個不同的.Id。 我懷疑你的問題將被解決,如果你按x.Category ==「1」分組。這會給你一個「假」組和一個「真」組,你可以分別區分一個。 – Tormod

+0

謝謝!我只是用一些示例數據編輯了原始問題。希望能幫助到你。 – user1628865

回答

5

你的問題不是很清楚,但我認爲這是你想要什麼:

int totalCount = data.Count(); 
int distinctCount = data.Select(x => x.Id).Distinct().Count(); 
List<Item> result = new List<Item> 
{ 
    new Item() { Category = "1", Value = distinctCount }, 
    new Item() { Category = "2", Value = totalCount - distinctCount }, 
}; 
+0

謝謝!由於我對LINQ相當陌生,所以我將這個問題過度複雜化了。我只是試着用一條LINQ聲明來做,但我絕對可以這樣做。 – user1628865

0

你在一天結束時是否需要兩個物體,還是隻能是一個迴歸的一部分?你可以這樣做:

var result = data. 
    GroupBy(x => x.Id). 
    Select(x => new { 
     DistinctCount = x.Select(v => v.Id).Distinct().Count(), 
     TotalCount = data.Count() 
    }); 

這或類似的東西可能會奏效。

0

我使用的數據結構要面對的情況。

Dictionary< string, List<YOUR_TYPE>> dictionary = new Dictionary<string, List<YOUR_TYPE>>(); 

我們可以從源頭獲得不同的密鑰。

var keys = YOUR_DATA_SOURCE.Select(item => item.YOUR_KEY_NAME).Distinct(); 

就像SQL:「SELECT DISTINCT YOUR_KEY_NAME FROM YOUR_DATA_SOURCE」。

foreach (var key in keys) { 
    var list = new List<YOUR_TYPE>(); 
    list.AddRange (dataSource.Where (x => x.YOUR_Filter_Property == YOUR_KEY_NAME).ToList()); 

    dictionary.Add (key, list); 
} 

然後我們可以使用Dictionary的默認功能,如「ContainKey」,「Keys」來幫助我們。