【发布时间】:2010-02-23 18:57:58
【问题描述】:
我正在制作一个日历,为了让自己更轻松,我打破了跨越数周的约会。
例如,1 月 1 日至 1 月 31 日跨越 6 周(我的日历总是 42 个单元格 - 6 x 7)。所以我基本上会在我的数据库中存储 6 行。
但是,我确实需要将所有这些行重新组合成一行。例如,如果我想以 Ical 格式导出我的日历。
我的数据库中有一个名为 bindingClassName 的字段,所有这些行都为该组任务获取相同的 unquie id,因此我可以轻松完成所有周。
// get all of the task rows by binding class name.
var found = plannerDb.Calendars.Where(u => u.UserId == userId && u.BindingClassName == bindingClassName)
.GroupBy(u => u.BindingClassName);
List<Calendar> allAppoingments = new List<Calendar>();
// go through each of the results and add it to a list of calendars
foreach (var group in found)
{
foreach (var row in group)
{
Calendar appointment = new Calendar();
appointment.AppointmentId = row.AppointmentId;
appointment.AllDay = row.AllDay;
appointment.BindingClassName = row.BindingClassName;
appointment.Description = row.Description;
appointment.EndDate = row.EndDate;
appointment.StartDate = row.StartDate;
appointment.Title = row.Title;
appointment.Where = row.Where;
appointment.UserId = row.UserId;
allAppoingments.Add(appointment);
}
}
// order
var test = allAppoingments.OrderBy(u => u.StartDate);
var firstAppointment = test.First();
var LastAppointment = test.Last();
Calendar newAppointment = new Calendar();
newAppointment.UserId = firstAppointment.UserId;
newAppointment.Description = firstAppointment.Description;
newAppointment.AllDay = firstAppointment.AllDay;
newAppointment.StartDate = firstAppointment.StartDate;
newAppointment.Title = firstAppointment.Title;
newAppointment.Where = firstAppointment.Where;
newAppointment.BindingClassName = firstAppointment.BindingClassName;
newAppointment.EndDate = LastAppointment.EndDate;
return newAppointment;
所以基本上那个大块找到了所有具有相同绑定名称的约会。然后我遍历每一个并将其变成一个 Calendar 对象,最后一旦全部完成,我将获得第一条和最后一条记录以获取 startDate 和 endDate。
所以我不擅长 linq,但我不确定是否可以在 groupBy 之后添加一些东西来做我想做的事情。
编辑。
一旦我从用户那里获得所有约会,我就会尝试将所有约会组合在一起。
所以到目前为止我有这个
我试过这样的。
var allApointments = calendar.GetAllAppointments(userId);
var group = allApointments.GroupBy(u => u.BindingClassName).Select(u => new Calendar()).ToList
我希望它会自动填充每个组,但事实并非如此。所以我不确定是否不再需要 groupby。
编辑@管理员
您好,感谢您解释排序和分组。您是如何解释的,尽管看起来其中任何一个都可以。
就像您用于获取第一个和最后一个日期的代码一样,效果很好,并且可以满足我的要求。
我认为分组可能会起作用,因为最后虽然我只是希望有一行具有第一条记录的开始日期和最后一条记录的结束日期,但所有其他信息都是相同的。
所以我不知道是否会更难写,或者像我说的那样你的查询做我想要的。
但是,该查询是单独使用的。就像我仅在用户单击以在我的日历上查看该约会时使用该查询一样。通过单击约会,我可以获得有关该约会的所有信息,这就是我需要查看该任务是否跨越多天并确定约会何时开始以及何时结束的地方。
现在我需要另一个查询,我认为如果我可以将它们分组为我从您的解释中理解的方式会更好。我认为这是因为我想从该用户导出表中的所有记录。
因此,如果我通过绑定名称将它们排序到一个 continue 块中,我仍然需要一些循环来遍历所有记录并获取第一个和开始日期。因此,如果我可以一次性将其分组,最终结果将只是每组绑定名称的一个记录,并且它具有第一个开始日期和第一个和最后一个记录的最后一个结束日期会更好。
【问题讨论】:
标签: c# linq linq-to-sql