我尝试使用SQL
个查询表达式汇总多个字段的F#
表。摘要取决于表与另一个表成功连接并按日期过滤。我可以毫无问题地进行加入和过滤,但我通过在查询中添加一些摘要值来挑战:
let summarySalesQuery =
query {
for header in db.SalesHeader do
where (header.ORDERDATE.HasValue && header.ORDERDATE.Value > (System.DateTime.Parse "2014-01-01"))
join row in db.SalesDetail
on ((header.ORDERNUMBER).ToString() = row.ORDERNUMBER)
let totQty = sumByNullable row.QUANTITY
let totOrderCo = row.ORIGINALORDERCOMPANY.Count()
select (totQty, totOrderCo)
}
由于sumByNullable
调用错误,此查询失败:
error FS3095: 'sumByNullable' is not used correctly. This is a custom operation in this query or computation expression.
但是,如果我使用此查询而不是单独使用sumByNullable
:
let summarySalesQuery =
query {
for header in db.SalesHeader do
where (header.ORDERDATE.HasValue && header.ORDERDATE.Value > (System.DateTime.Parse "2014-01-01"))
join row in db.SalesDetail
on ((header.ORDERNUMBER).ToString() = row.ORDERNUMBER)
sumByNullable row.QUANTITY
}
返回单个值,可能是row.QUANTITY
中所有值的总和:
val summarySalesQuery : Nullable<decimal> = 2333336M
构建查询
let summarySalesQuery =
query {
for header in db.SalesHeader do
where (header.ORDERDATE.HasValue && header.ORDERDATE.Value > (System.DateTime.Parse "2014-01-01"))
join row in db.SalesDetail
on ((header.ORDERNUMBER).ToString() = row.ORDERNUMBER)
groupBy row.ORDERNUMBER into group
let totQty = query { for g in group do sumByNullable g.QUANTITY }
select (group.Key, totQty)
}
产生错误
error FS0039: The field, constructor or member 'QUANTITY' is not defined
我无法解密,因为QUANTITY
显然是可用的,给定前一个查询的返回值。
我想构建一个可以从dB中的表中返回多个汇总值的查询。如何构造一个查询,该查询连接,过滤和汇总数据库表上的多个字段,并返回要汇总的元组大小? -
注意: 我无法控制数据库中字段的类型,因此需要.ToString()
和查询中所需的解析。 < / p>