C# linq:具有多个可空类型的groupby

C# linq:具有多个可空类型的groupby,c#,linq,C#,Linq,我有下表: | AppointID | UserID | AppointSet | AppointAttended | AppointCancelled | AppointRescheduled | | 1 | 1 | 2/15/2011 | | 3/11/2011 | | | 2 | 1 | 2/17/2011 | |

我有下表:

| 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,因为我需要按多个列进行分组,而且它是一个可为null的类型,并且我无法使用.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(),
Date是作为参数传入的日期时间,表示所查询月份的第一天:例如,2011年3月1日为3月份

我在groupby语句中得到“匿名类型不能有多个同名属性”,并且.Key不起作用,因此按天分组不起作用

如果你有任何建议,我将不胜感激


谢谢。

您可以尝试显式设置您所分组的匿名类型属性的正确名称:

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

您可以尝试显式设置您要分组的匿名类型的属性的正确名称:

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

好的,这将清除语法错误。现在我对ViewDate=daygroups.Key有一个问题。如果我添加类似于=daygroups.Key.Set的内容,它就会工作。例如:它将按该键分组。然而,我如何确保我得到一个日期,不管是什么(例如,可能是Set=null,然后进入ViewDate?)我得到了ViewDate的一行:(从daygroups中的d中选择d.AppointDatetime.date)。首先(),问题是当我发送2011年3月1日作为日期时,我得到了从2月26日到4月2日的所有约会。知道为什么吗?语法正常,但输出很奇怪:我得到的日期不在月份内,结果是1s或0s。可能是由于group by语句无效而导致逻辑错误。我认为这是不对的。如果您按每列分组,然后使用
union
语句将所有结果合并到一个表中,会怎么样?感谢您的关注。我在这里重新表述了这个问题,因为我对这个问题做了一些改进。好的,这将清除语法错误。现在我对ViewDate=daygroups.Key有一个问题。如果我添加类似于=daygroups.Key.Set的内容,它就会工作。例如:它将按该键分组。然而,我如何确保我得到一个日期,不管是什么(例如,可能是Set=null,然后进入ViewDate?)我得到了ViewDate的一行:(从daygroups中的d中选择d.AppointDatetime.date)。首先(),问题是当我发送2011年3月1日作为日期时,我得到了从2月26日到4月2日的所有约会。知道为什么吗?语法正常,但输出很奇怪:我得到的日期不在月份内,结果是1s或0s。可能是由于group by语句无效而导致逻辑错误。我认为这是不对的。如果您按每列分组,然后使用
union
语句将所有结果合并到一个表中,会怎么样?感谢您的关注。我在这里重新表述了这个问题,因为我对这个问题做了一些改进。