【发布时间】:2014-04-17 02:32:03
【问题描述】:
我有一个 F# sql 查询,需要对每组中的两列求和。
let financials = query{
for data in dbData do
groupValBy (data.earning, data.losses) data.store into group
select (group.Key, group.Sum(fun (group) -> fst group), group.Sum(fun (group) -> snd group))
}
我还没有找到任何关于如何做到这一点的例子,但是这段代码编译得很好,而且根据每一个迹象,它应该可以工作。但是,在执行时,我总是收到一条异常消息“无法格式化节点'新'以执行为 SQL。”如果我删除 data.losses 一切正常,但添加第二个值会导致错误。还有另一种方法可以做到这一点吗?建议将不胜感激。
注意,这个问题类似,但处理的是多列分组的相反情况:groupby multiple columns in a F# 3.0 query
更新:
我还尝试了以下方法:
(NewAnonymousObjectHelper(T(data.earning, data.losses)))
其中 T 是:
type T(earning : decimal, losses : decimal) =
member val Earning=earning with get,set
member val Losses=losses with get,set
但是,需要创建一个接受类型 T 的新 Sum 函数。我也尝试过使用 F# PowerPack 中的 MutableTuple,但未能让它识别 MutableTuple(对此代码/dll 和关联的命名空间不太熟悉)。但它似乎应该工作:
let t = MutableTuple<_,_>(item1=data.earning,item2=data.losses)
groupValBy t data.store into group
也许有人可以就我在这里遗漏的内容提出建议。
结论:
看起来像在选择之前使用 let 对结果求和是要走的路。不清楚为什么 group.Sum() 不能在选择行上工作。 (注意:我上面提到的错误消息是由一些 sql server 问题引起的。)
【问题讨论】: