У меня есть список этого объекта:
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, чтобы эта работа работала?
Редактировать: я бы предпочел свободный стиль синтаксиса, ноЯ не смог заставить вышеуказанное работать.Ответ в любом варианте был бы отличным.