C# SQL中的数据分组

C# SQL中的数据分组,c#,sql,entity-framework,C#,Sql,Entity Framework,我正在使用C#和EF5.0进行一个小项目,我需要对一些数据进行分组。假设我有一个建筑物中的柱表,如下所示 +----------+--------Columns Table--+------+------+ | ColumnID |ColumnName|Width|Length|Height|number| +----------+----------+-----+------+------+------+ | 1 | C101 | 50 | 70 | 250 |

我正在使用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
                            }
                       }
                   }
               }
          }
     }
}

您可以从组合键上的分组开始:

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


然后在
columnNames

+1字段上进行一些字符串操作,以获得“我更喜欢线索而不是确切的解决方案”,这纯粹是一个吹毛求疵的问题,但您可能希望使用
C(101106)
而不是
C(101-106)
。对于第一个,对我来说,它表示第101列和第106列,而使用破折号表示第101列到第106列,这让我一开始很困惑。只是澄清一下,看起来您是在对具有相同
宽度
长度
高度
值的行进行分组,对吗?在我的脑海中,似乎很难在分组中得到您想要的
ColumnName
结果,因为您不会在
ColumnName
上分组。可能需要做一个
GroupBy
,然后在后面添加
ColumnName
内容。@spender,我不是真正的软件开发人员。我是一名土木工程专业的学生,喜欢编程并用它来简化自己的事情(:这就是我不喜欢精确解的原因。@LittleBobbyTables是的,你是对的。谢谢你的建议。哦。错过了计数位。Added now.OMG。我在问题中添加了我的“分组代码”,然后看到了你的答案。最后,我笑了笑(:Thx为答案。@HasanAyan了解Linq所能提供的可能是作为一名.net开发人员所能迈出的最大一步。花点时间熟悉一下自己。
groups
 .Select(g => new {
    g.Key.Width, 
    g.Key.Length, 
    g.Key.Height, 
    columnNames = g.Select(x => x.ColumnName),
    number = g.Count()})