7

C# と EF5.0 を使用して小さなプロジェクトに取り組んでおり、データをグループ化する必要があります。以下に示すような建物に列のテーブルがあるとします。

+----------+--------Columns Table--+------+------+
| ColumnID |ColumnName|Width|Length|Height|number| 
+----------+----------+-----+------+------+------+
|        1 |   C101   |  50 |   70 | 250  | 1    |  
|        2 |   C102   |  70 |   70 | 250  | 1    |    
|        3 |   C103   |  70 |   60 | 250  | 1    |    
|        4 |   C104   |  90 |   70 | 250  | 1    |     
|        5 |   C105   |  40 |   50 | 250  | 1    |     
|        6 |   C106   |  50 |   70 | 250  | 1    |    
|        7 |   C107   |  50 |   60 | 250  | 1    |    
|        8 |   C108   |  70 |   70 | 250  | 1    |     
+----------+----------+-----+------+------+------+

上記のデータを次のようにグループ化して表示するには、C# コードが必要です。

+----------+---Groupped Columns Table-----+------+
|G_ColumnID|ColumnName|Width|Length|Height|number| 
+----------+----------+-----+------+------+------+
|        1 |C(101-106)|  50 |   70 | 250  | 2    |  
|        2 |C(102-108)|  70 |   70 | 250  | 2    |    
|        3 |   C103   |  70 |   60 | 250  | 1    |    
|        4 |   C104   |  90 |   70 | 250  | 1    |     
|        5 |   C105   |  40 |   50 | 250  | 1    |         
|        6 |   C107   |  50 |   60 | 250  | 1    |            
+----------+----------+-----+------+------+------+

私は正確な解決策よりも手がかりを好みます。

編集:以下のコードは私の現在の状態を示しています。このコードを使用して、同じ高さ、幅、長さの列を見つけることができると思います。しかし、グループの新しい名前を生成する方法がわかりません。

using (pehlivanEntities context = new pehlivanEntities())
{           
     foreach (var item in context.table1)
     {               
          int id = item.ColumnID;
          foreach (var item2 in context.table1)
          {
               int id2 = item2.ColumnID;
               if (id != id2)
               {
                   if (item.Width == item2.Width)
                   {
                       if (item.Length == item2.Length)
                       {
                            if (item.Height == item2.Height)
                            {
                               //Alter item.ColumnName
                               //increase item.number by one
                               //Remove item2
                            }
                       }
                   }
               }
          }
     }
}
4

1 に答える 1

5

複合キーでグループ化することから始めます。

var groups = myData.GroupBy(d => new{d.Width, d.Length, d.Height})

それから

groups
 .Select(g => new {
    g.Key.Width, 
    g.Key.Length, 
    g.Key.Height, 
    columnNames = g.Select(x => x.ColumnName),
    number = g.Count()})

columnNames次に、フィールドでの少しの文字列操作

于 2012-10-15T17:37:48.497 に答える