【问题标题】:Grouping by multiple columns and then projecting按多列分组,然后投影
【发布时间】:2014-08-10 06:18:29
【问题描述】:

在下面的代码中,我试图从原始序列返回一个按 ProductName、Size 和 Packaging 属性分组的新序列类型,但我得到了一个未分组的新类型序列。我在这里错过了什么?

query{
        for row in allDeliveries do
        let key = AnonymousObject<_,_,_>(row.ProductName,row.Size,row.Packaging)
        groupValBy row key into g
        select g
    }
    |> Seq.map (fun (del) -> 
    {
        POFD = del;
        ProductName = del.Key.Item1;
        Size = del.Key.Item2;
        Packaging = del.Key.Item3;
        Quantity = del.Count()
    })

【问题讨论】:

  • 我不认为AnonymousObject 会实现某种等价检查——为什么不使用像groupValBy row (row.ProductName, row.Size, row.Packaging) 这样的普通F# 元组?为什么不使用select 部分直接获取您的记录?

标签: f# f#-3.0


【解决方案1】:

这是我的解决方案:

query{
        for row in allDeliveries do
        groupValBy row (row.ProductName, row.Size, row.Packaging) into g
        select {
            POFD = g;
            ProductName = query{
                for row2 in g do
                select row2.ProductName
                headOrDefault
            }

            Size = query{
                for row2 in g do
                select row2.Size
                headOrDefault
            }
            Packaging = query{
                for row2 in g do
                select row2.Packaging
                headOrDefault
            }
            Quantity = g.Count()
        }
    }

【讨论】:

  • 看看... tuples 为你做的 ;)
  • @CarstenKönig 是的,您应该将其发布为答案,:-)
  • 不,没关系......如果你接受自己的,我希望你能得到一些代表......有一些 +1 ;)
猜你喜欢
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 2023-04-08
相关资源
最近更新 更多