以下のようなデータテーブルがあります。C# を使用して、リスト 2 のネストされたコレクション クラス構造を使用してそれらをグループ化しようとしています。そのため、結果はリスト 3 のようになります。各レベルの各コレクションは、繰り返し値を持つべきではありません。テーブルを解析する方法を知っている人はいますか? ありがとう。
リスト 1:
user_ID firstName Role service facility RWP Fac_ID svc_ID rol_ID
------- --------- ----------------------- --------------------------- -------------- -----
874 Joe Tech Primary New York, NY 9-2 1 1 1
874 Joe Reviewer Primary New York, NY 2-5 1 1 2
874 Joe Reviewer Primary Los Angeles, CA 2-5 2 1 2
874 Joe Super User Primary Los Angeles, CA 9-10 2 1 3
874 Joe Administrator Application Administration Los Angeles, CA 1-2 2 2 4
874 Joe Super User Application Administration Chicago, IL 10-12 3 2 3
リスト 2:
Facility {
fac Facility;
List<Service> Services;
}
Service{
svc Service;
List<Role> Roles;
}
Role{
rol Role;
List<RWP> RWP;
}
RWP{
string H;
}
fac{
int fac_ID;
string fac_Name;
}
svc{
int svc_ID;
string svc_Name;
}
rol{
int rol_ID;
string rol_Name;
}
リスト 3:
NY
|
+-- Primary --+
| |
Tech Reviewer
| |
9-2 2-5
+------- LA --------------------+
| |
Application +----Primary----+
Administration | |
| | |
Administrator Reviewer Super User
| | |
1-2 2-5 9-10
CH
|
Application
Administration
|
Super User
|
10-12
リスト 4:
private static void populateUserFSR(ref User thisUser, DataTable dt, string FSRtype)
{
string tmpFacility = string.Empty;
string tmpService = string.Empty;
string tmpRole = string.Empty;
FSR thisFSR = new FSR();
thisFSR.serviceRoles = new List<SR>();
SR thisSR = new SR();
thisSR.service = new List<Service>();
thisSR.rolesWatchProviders = new List<RP>();
RP thisRWP = new RP();
thisRWP.providers = new List<string>();
foreach (DataRow r in dt.Rows)
{
if (r["facility_ID"].ToString().Trim().ToUpper() != tmpFacility)
{
//new facility row
if (!string.IsNullOrEmpty(tmpFacility))
{
//add to a proper collection according to their FSRtype
switch (FSRtype)
{
case "Assigned":
thisUser.FSRAssigned.Add(thisFSR);
break;
case "Preferred":
thisUser.FSRPreferred.Add(thisFSR);
break;
case "Selected":
thisUser.FSRSelected.Add(thisFSR);
break;
}
thisFSR = new FSR();
thisFSR.serviceRoles = new List<SR>();
thisSR = new SR();
thisSR.service = new List<Service>();
thisSR.rolesWatchProviders = new List<RP>();
thisRWP = new RP();
thisRWP.providers = new List<string>();
}
tmpFacility = r["facility_ID"].ToString();
tmpService = string.Empty;
tmpRole = string.Empty;
thisFSR.facility = new Facility();
thisFSR.facility.Facility_ID = int.Parse(r["facility_ID"].ToString());
thisFSR.facility.Facility_Name = r["facility_name"].ToString();
//only rank with FSR Assigned, no ranking with FSR Preferred
if (FSRtype == "Assigned")
thisFSR.rank = int.Parse(r["rank"].ToString());
}
if (r["Service_ID"].ToString().Trim().ToUpper() != tmpService)
{
tmpService = r["Service_ID"].ToString();
tmpRole = string.Empty;
Service thisService = new Service();
thisService.ServiceID = int.Parse(r["Service_ID"].ToString());
thisService.ServiceName = r["fac_service"].ToString();
thisSR.service = new List<Service>();
thisSR.service.Add(thisService);
thisFSR.serviceRoles.Add(thisSR);
}
if (r["Role"].ToString().Trim().ToUpper() != tmpRole)
{
tmpRole = r["Role"].ToString();
thisRWP.role = new Role();
thisRWP.role.Id = int.Parse(r["role_ID"].ToString());
thisRWP.role.Role = r["Role"].ToString();
thisRWP.providers = getCohortPCP(thisUser);
thisSR.rolesWatchProviders.Add(thisRWP);
}
}
}