2011-03-09 87 views
1

我有如下表:LINQ:GROUPBY多可空类型

| AppointID | UserID | AppointSet | AppointAttended | AppointCancelled | AppointRescheduled | 
|  1  | 1 | 2/15/2011 |     | 3/11/2011  |     | 
|  2  | 1 | 2/17/2011 |     |     | 3/11/2011  | 
|  3  | 1 | 3/11/2011 | 3/11/2011  |     |     | 
|  4  | 1 | 3/10/2011 |     | 3/11/2011  |      

|

我想要做的是创建以下输出,按天计算活动。我已经定义的字段

| Date  | Set | Attended | Rescheduled | Cancelled | 
| 3/10/2011 | 1 |    |     |    | 
| 3/11/2011 | 1 |  1  |  1   |  2  | 

注意AppointAttended,AppointCancelled和AppointRescheduled为空,因为可能没有这些日期。

这就是我到目前为止,我正在与groupby挣扎,因为我需要按多列分组,并且它是一个可以为空的类型,我不能让.Key工作!换句话说,我觉得很坚持这一点:

var OutputMonthlyActivity = from appnt in MyDC.LeadsAppointments 
where appnt.UserID == TheUserID 
where (appnt.AppointSet.Month == TheDate.Month && appnt.AppointSet.Year == TheDate.Year) || 
(appnt.AppointAttended.Value.Month == TheDate.Month && appnt.AppointAttended.Value.Year == TheDate.Year) || 
(appnt.AppointRescheduled.Value.Month == TheDate.Month && appnt.AppointRescheduled.Value.Year == TheDate.Year) || 
(appnt.AppointCancelled.Value.Month == TheDate.Month && appnt.AppointCancelled.Value.Year == TheDate.Year) 
group appnt by new { appnt.AppointSet, appnt.AppointRescheduled, appnt.AppointAttended, appnt.AppointCancelled } into daygroups 
where daygroups.Count() > 1 
select new ViewMonthlyActivityModel() 
{ 

ViewDate = daygroups.Key, 

CountTotalSetOnDay = (from c in daygroups 
where c.AppointSet.Date == daygroups.Key 
select c.AppointID).Count(), 

TheDate是则传递作为参数的日期时间以及表示该月的第一天多数民众赞成查询:2011/3/1为的月份3月举例。

我在groupby语句中得到“匿名类型不能具有多个具有相同名称的属性”,并且.Key不起作用,因此按天分组无法正常工作。

如果您有任何建议,那将非常感激。

谢谢。

回答

1

您可以尝试明确设置你匿名类型属性的正确名称上,你组:

group appnt by new { 
        Set = appnt.AppointSet, 
        Rescheduled = appnt.AppointRescheduled, 
        Attended = appnt.AppointAttended, 
        Cancelled = appnt.AppointCancelled } into daygroups 
+0

确定,即清除语法错误。现在我有一个ViewDate = daygroups.Key的问题。它工作,如果我添加= daygroups.Key.Set例如:它会按该键组合。然而,我如何确保我得到一个日期,不管是什么(也就是说,可能是Set = null,然后进入ViewDate?) – frenchie 2011-03-09 23:58:22

+0

我得到了与ViewDate的行:(从daygroups中的d选择d.AppointDatetime。日期)。第一(),问题是,当我发送3/1/2011作为TheDate时,我会从Februray 26日到4月2日的所有约会。任何想法为什么? – frenchie 2011-03-10 00:11:13

+0

语法有效,但输出很奇怪:我得到的日期不在月内,结果是1或0。 – frenchie 2011-03-10 00:24:58