2011-03-09 90 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