我有這個對象的列表:如何在一個LINQ中獲得兩個不同的聚合?
public class Customer
{
public int Id { get; set; }
public string EmailAddress { get; set; }
public DateTime ServiceStartDate { get; set; }
public DateTime? BillingStartDate { get; set; }
public string Status { get; set; }
}
在製作圖表製劑顯示在儀表盤上我試圖凝聚這份名單到這個對象的另一個列表:
public class DashboardCustomerConversions
{
public string Month { get; set; }
public int Trials { get; set; }
public int Purchased { get; set; }
}
凡最終的結果看起來是這樣:
Month Trials Purchases
--------- ------ ---------
Dec 2010 390 250
Jan 2011 345 190
Feb 2011 576 340
我有一個很難拿出一個LINQ聲明能達到期望的最終結果。這種說法是非常接近:
var list = from b in results
group b by new { b.ServiceStartDate.Year, b.ServiceStartDate.Month } into g
select new Test
{
Month = string.Format("{0} {1}", CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(g.Key.Month), g.Key.Year),
Trials = g.Count(),
Purchased = g.Count()
};
中最明顯的問題是「購買= g.Count()」行,它只是重複的試驗結果。我想計算BillingStartDate.HasValue爲true的對象。
有沒有一種方法來重構LINQ來完成這項工作?
編輯:我寧願流利的語法風格,但我無法得到上述工作。任何變化的答案都會很好。
唉!我很親密。我一直試圖通過「b」或「g」知道這是錯誤的,但無法提出更好的東西。我仍然吮吸lambda。謝謝。 – 2011-05-10 13:36:46