Извлечение результатов из списка <Customers>с использованием LINQ - PullRequest
0 голосов
/ 21 января 2009

У меня есть список клиентов

List<Customers> cust = new List<Customers>();
cust.Add(new Customers(){ID=1, Name="Sam", PurchaseDate=DateTime.Parse("01/12/2008")});
cust.Add(new Customers(){ID=2, Name="Lolly" PurchaseDate=DateTime.Parse("03/18/2008")});

Я хочу показать 2 отдельных результата, таких как:

Покупки по покупателям за год // Группировка по годам и отображение идентификатора, имя
Покупки клиентом за год - месяц // Группировка по году и месяцу с отображением идентификатора, имя

Также, что если я хочу заказать год?

Обновление:

Еще одно дополнение. Если у меня есть поле с именем «Статус» в классе «Клиент», в котором любое из этих значений «Y», «N», «C» означает «да», «нет» и отменю, как я создам запрос, чтобы задать соотношение в%

Y - 20% N - 30% С - 50%

Ответы [ 2 ]

6 голосов
/ 21 января 2009

Группировка по годам:

var groupByYear = customers.GroupBy(customer => customer.PurchaseDate.Year);

foreach (var group in groupByYear)
{
    Console.WriteLine("Year: {0}", group.Key);
    foreach (var customer in group)
    {
        Console.WriteLine("{0}: {1}", customer.ID, customer.Name);
    }
}

Группировка по году и месяцу:

var groupByYearMonth = customers.GroupBy(customer => 
     new DateTime(customer.PurchaseDate.Year, customer.PurchaseDate.Month, 1));
foreach (var group in groupByYear)
{
    Console.WriteLine("Year/month: {0}/{1}", group.Key.Year, group.Key.Month);
    foreach (var customer in group)
    {
        Console.WriteLine("{0}: {1}", customer.ID, customer.Name);
    }
}

Сортировка:

var ordered = customers.OrderBy(customer => customer.PurchaseDate.Year);

Все они используют «точечную нотацию» вместо выражений запроса, потому что они настолько просты - но вы можете использовать выражение запроса, если хотите.

РЕДАКТИРОВАТЬ: Для части статуса, просто используйте ответ Дэвида B .

2 голосов
/ 21 января 2009
int total = customer.Count()

var counts = customers.GroupBy( c => c.Status )
  .Select( g => new
  {
    Status = g.Key,
    TheRatio = (g.Count() * 100) / total;
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...