C# SQL中的数据分组
我正在使用C#和EF5.0进行一个小项目,我需要对一些数据进行分组。假设我有一个建筑物中的柱表,如下所示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 |
+----------+--------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()})