【问题标题】:Lambda Help Grouping and Summing in C#, need a Func<IGrouping<int, anonymous type, int> or Expression<Func<IGrouping<int, anonymous type>, decimal>>Lambda 帮助 C# 中的分组和求和,需要 Func<IGrouping<int, anonymous type, int> 或 Expression<Func<IGrouping<int, anonymous type>, decimal>>
【发布时间】:2011-03-20 22:14:10
【问题描述】:

我在执行内联 .GroupBy() 和 .Sum() 操作时遇到了一些麻烦。

我有一个通过 let 获得的数据子集,因此它的返回类型已经是匿名的。希望这个示例中有足够的代码来展示我想要实现的目标......

from r in Repo.R
  join f in Repo.F
    on f.ID equals r.FFK

let totalB = Repo.B
    .Join(
        b => b.FKID,
        f => f.ID
        (b, f) => new { b.ID, b.Qty, b.Fee })
    .Where(
        b => b.someCriteria == someInput)

group r by new 
   { 
      r.Name,
      TotalFee = totalB
                 .GroupBy(tb => tb.TypeId)
                 .Sum(  /*having trouble here*/ )
   }
into rgroup
select new FinalOutput
   {
        rgroup.Key.Name,
        rgroup.Key.TotalFee
   }

我需要一个有效的:

Func<IGrouping<int, anonymous type>, int> selector

或

Expression<Func<IGrouping<int, anonymous type>, decimal>> selector

【问题讨论】:

  • 你忘了说你想做什么。您可以使用g =&gt; g.Count() 作为其中之一(仅作为示例)。顺便说一句,你没有太多嵌套组吗?
  • 我相信我需要嵌套的 GroupBy 来帮助拆分一组数据,这些数据是在 .Contains(List) 操作中获取的,我需要一些求和和计数操作。我确实需要对具有“双”值而不仅仅是计数的字段求和...
  • @SLaks,不要太关注...
  • 您能否给我们提供一组您将要查询的示例数据以及您想要的结果?

标签: c# .net .net-3.5 lambda


【解决方案1】:

看看能不能写.Sum(x =&gt; x.Key.Fee),但是我怀疑整个查询能不能工作或者返回预期的结果...

【讨论】:

    【解决方案2】:

    您需要像这样将分组传递给 Sum 选择器

    .Sum(g => ...)
    

    这里的“g”是你的分组。它有一个键,它是分组依据的值,它还包含您分组的所有值。这些是您的匿名类型的值。

    如果你在 "g" 上调用 Sum,它会让你选择为你的匿名类型指定一个选择器。

    //this is how you can sum values within a grouping
    .Sum(g => g.Sum(tb => tb.Fee))
    

    在我的示例中,我猜想“Fee”是属性名称,但是一旦您取消引用“tb”变量,您的智能感知就会启动并显示可用的属性。

    我希望这会有所帮助:-)

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多