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 回答