使用Linq To Objects执行分组/投影的最简单方法

时间:2010-09-13 18:55:54

标签: c# linq .net-3.5 projection linq-group

我从数据层获取数据,我需要使用Linq To Objects在中间层进行转换(我不控制应用程序的这一层)。我必须使用多个键执行分组操作,然后在非键字段上执行字符串连接。根据下面的数据,我想按CustomerID和Date进行分组,并创建一个新结构,其中只根据键生成一行,非键字段(在本例中为Item)合并为一个字符串: / p>

    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 个答案:

答案 0 :(得分:3)

可替换地:

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())
  });

答案 1 :(得分:2)

这样的东西?

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)
             };