我正在尝试创建一份友好的报告,根据时间总结学生人数。我最初开始使用循环for campusname,然后是时间,然后是day和hibut,这是非常低效和缓慢的。我决定采用另一种方法,在一个选择中选择我需要的所有数据,并使用c#进行组织。
我的问题是我不确定是将它放入数组,列表,还是字典或数据表来总结注册并组织它,如下所示(模型,未计算)。任何指导都将不胜感激。
答案 0 :(得分:1)
好吧,如果您只需要向用户显示一些数据(而不是编辑它),您可能需要创建一个报告。
否则,如果您只需要总和,则可以获得IEnumerable
中的所有数据并致电.Sum()
。正如colinsmith指出的那样,你可以并行使用Linq。
但有一件事是明确的......如果你有很多数据,你不想做很多查询。您可以在SQL中使用sum
查询(如果数据存储在数据库中),也可以从您获取的集合中执行求和。
您不想在循环中获取数据。在内存中处理数据比在数据库中多次查询然后处理它更快。
答案 1 :(得分:0)
通常情况下,我会建议你在数据库中这样做,即选择使用组等,我有点麻烦弄清楚你的第一张照片与第二张关于日子的关系,所以我可以'举个例子。
你当然可以在C#中使用LINQ到对象来做这个,但是我会首先尝试在数据库中解决它,你会更好地提高性能和带宽。
答案 2 :(得分:0)
我不太确定你到底是怎么回事。但根据我的理解,我建议你创建一个代表你的注册的课程
public class Enrollment
{
public string CampusName { set;get;}
public DateTime DateEnrolled { set;get;}
}
并将所有注册详细信息从数据库中获取到此类的集合
List<Enrollment> enrollments=db.GetEnrollments();
现在,您可以对此Collection执行许多操作以获取所需数据
Ex:如果你想在星期五发生所有入学
var fridaysEnrollMent = enrollments.
Where(x => x.DateEnrolled.DayOfWeek == DayOfWeek.Friday).ToList();
如果您希望在AA
校园
var fridayCount = fridaysEnrollMent .Where(d => d.CampusName == "AA").Count();
答案 3 :(得分:0)
类似
select campusname, ssrmeet_begin_time, count(ssrmeet_monday), count(ssrmeet_tue_day) ..
from the_table
group by campusname, ssrmeet_begin_time
order by campusname, ssrmeet_begin_time
/
应该接近你想要的。计数只计算值,而不是NULL。它比首次向客户端提取所有数据的速度快数千倍。让数据库为您进行分析,它已经包含了所有数据。
BTW:代替那些图片,给出一些带有数据的ddl和insert语句更聪明。这将邀请更多人帮助回答这个问题。