2016-06-06 81 views
0

我有一個我上傳的Excel表。它有用於用戶名的列和他們註冊的服務器。我想統計每臺服務器上每個唯一用戶名的行數。如何在數據表中返回不同值和重複值的計數?

Table: 
Username | Server 
bob  Production0 
bob  Production1 
mike  Production1 
Jerry  Production2 
Tom  Production0 

Output: 
On Production0 = 2 Unique Users (Bob and Tom) 
Production1 = 2 Unique Users (Bob and Mike) 
Production2 = 1 Unique Users (Jerry) 

所以對於Production0例如,我想弄清楚如何使用戶名具有唯一的名稱,但如果在不同的服務器上,以及保持名稱:

DataView newView = new DataView(uploadedfileDataTable); 
//Get only the username and Server columns  
DataTable wantedTable = newView.ToTable(false,"Column A","Column B"); //Get only the username and Server columns 
    int prodCount = wantedTable.AsEnumerable().Count(row => row.Field<string>("Column A") == "//HOW TO MAKE DISTINCT" && row.Field<string>("Column B") == "Production0"); 
    numUsersProd0.Text = prodCount.ToString(); 

回答

0

剛組由服務器名稱,然後對不同用戶進行計數。

var results = watedTable.AsEnumerable() 
    .GroupBy(row => row.Field<string>("Column B")) 
    .Select(grp => new 
    { 
     Server = grp.Key, 
     UserCount = grp.Select(row => row.Field<string>("ColumnA")).Distinct().Count() 
    }); 

foreach(var r in results) 
    Console.WriteLine(r.Server + " has " + r.UserCount + " users."); 

或者,如果你知道你想要的計數,然後該名稱過濾服務器,選擇用戶名,並計算不同的值。

​​
+0

作品十分感謝,我將如何擴展。哪裏子句包括多個字段,即增加「列C,d,E,.. ==‘其他’ – mFine

+0

你可以只編寫你需要什麼邏輯像'Where(row => row.Field (「Column B」)==「Production0」&& row.Field (「Column F」)==「Something」)' – juharr

相關問題