【发布时间】:2016-07-19 02:24:57
【问题描述】:
假设我在 SQL 中有一个如下所示的表:
record_id|user_id|Name |Meals
---------|-------|-----|-----
1 | 1 | Bob|1
2 | 2 |Sally|2
3 | 3 |Roger|2
4 | 1 | Bob|3
5 | 4 | Joan|1
6 | 2 |Sally|1
我想在 C# 中创建一个对象,用于汇总出现多次的任何名称的用餐次数:
user_id| Name|Meals
-------|-----|-----
1 | Bob|4
2 |Sally|3
3 |Roger|2
4 | Joan|1
使事情变得复杂的是,由于程序的性质,必须一次性检索整个表,而不是使用 SQL 语法将 Bob 和 Sally 的饭菜相加,然后在 C# 数据读取器中迭代,并且最后添加到一个 IEnumerable 数组中。所以我需要一些类似的东西:
List<MyIEnumerable> MyList = new List<MyIEnumberable>();
while(dr.Read()) {
if(MyList.Contains(Convert.ToInt32(dr[1]))) {
// Needs to combine the dr record with the existing record in MyList
}
else {
MyIEnumerable PersonEntry = new MyIEnumerable();
PersonEntry.user_id = Convert.ToInt32(dr[1]);
PersonEntry.Name = dr[2].ToString();
PersonEntry.Meals = Convert.ToInt32(dr[3]);
MyList.Add(PersonEntry);
}
}
所以你可以看到我想要得到的逻辑。 .Contains 在这种情况下实际上不起作用,但我需要类似的东西。
【问题讨论】:
-
为什么你的项目要求你设计的程序很糟糕,并且在应用层做应该在数据库中完成的工作?
-
因为我实际上并不负责我正在使用的数据集。我有一个需要能够运行的查询,它返回一个像我的示例一样的数据集。我很清楚这是一个可怕的 PITA,但我必须使用我所拥有的。
-
这很粗糙。好吧,告诉您的 DBA 和/或数据管理员,他们对我的工作不擅长
-
哈哈!我会马上解决的......
标签: c# sql-server