0

私がやろうとしていることを示すと、より簡単になります:

public struct Server
{
   public string ServerName;
   public string SiteName;
}

List<Server> targetServerList = GetTargetServerList();

targetServerList には次のデータが含まれます。

SiteName: A
ServerName: 1

SiteName: A
ServerName: 2

SiteName: B
ServerName: 3

SiteName: C
ServerName: 4

目標: 以下を含むリストを作成する必要があります。

SiteName: Site A
ServerNames: 1,2

SiteName: Site B
ServerNames: 3

SiteName: Site C
ServerNames: 4

そこで、次のクラスを作成しました。

private class ServersPerSite
{
   string ServerNames;
   string SiteName;
}

そのため、SiteName がまだ存在しない場合は、ループして新しい SiteName を持つ新しい項目を追加し、それに ServerName を追加する必要があります。存在する場合は、ServerName を追加するだけです。

foreach (Server server in targetServerList)
{
  //??missing code
}

それ、どうやったら出来るの?Javascript では本当に簡単でした:

  //Separate the servers per site
  var sites=new Object();

  $("#ServerGrid").jqGrid('getGridParam', 'data').forEach(function(row) 
  {
    if(!sites[row.SiteName])
    {
        sites[row.SiteName] = new Array();
    }
    sites[row.SiteName][sites[row.SiteName].length] = row.ServerName;
  }

ありがとうございました!

4

2 に答える 2

4

メソッドでLINQを使用できますGroupBy

var result = targetServerList
                .GroupBy(s => s.SiteName)
                .Select(g => new ServersPerSite()
                            {
                                SiteName = "Site " + g.Key,
                                ServerNames = string.Join(",", g);
                            });

編集:結果としてDictionary

targetServerList.GroupBy(s => s.SiteName)
                .ToDictionary(g => "Site " + g.Key,
                              g => string.Joins(",", g));
于 2013-05-15T04:36:50.600 に答える