Самый простой способ выполнить группировку / проекцию с помощью Linq To Objects - PullRequest
1 голос
/ 13 сентября 2010

Я получаю данные из слоя данных, которые мне нужно преобразовать на среднем уровне, используя Linq To Objects (я не контролирую этот уровень приложения). Я должен выполнить операцию группировки, используя несколько ключей с последующей конкатенацией строк в неключевых полях. Учитывая данные ниже, я хочу сгруппировать по CustomerID и Date, и создать новую структуру, в которой на основе ключа создается только одна строка, а неключевое поле (в данном случае Item) объединяется в одну строку:

    CustomerID  Date         Item
    A          11/1/2001    Bread
    A          11/1/2001        Orange Juice
    A          11/1/2001        Salad Dressing
    B          11/1/2001    Bananas
    C          5/6/2001     Candy
    C          12/8/2005    Candy               


    CustomerID  Date         Item
    A          11/1/2001    Bread
                             Orange Juice
                             Salad Dressing
    B          11/1/2001    Bananas
    C          5/6/2001     Candy
    C          12/8/2005    Candy

Возможно ли это с использованием синтаксиса linq в функциональном стиле или мне приходится прибегать к обязательному синтаксису foreach старой школы?

Ответы [ 2 ]

3 голосов
/ 13 сентября 2010

В качестве альтернативы:

var results = items
  .GroupBy(i => new { i.Date, i.CustomerID })
  .Select(g => new {
    CustomerID = g.Key.CustomerID,
    Date = g.Key.Date,
    Item = string.Join(", ", g.Select(i => i.Item).ToArray())
  });
2 голосов
/ 13 сентября 2010

Как то так?

var result = from item in items
             group item by new { item.Date, item.CustomerID } into g
             select new
             {
                 g.Key.CustomerID,
                 g.Key.Date,
                 Item = string.Join(", ", from i in g select i.Item)
             };
...