f# - F#如何为主从数据构造一个Linq查询?
问题描述
我正在使用 SQLProvider 从 SQL Server 获取数据。
我的查询如下所示。问题是它为订单详细信息的每一行提供了一个订单记录。我理解为什么,因为如果我在 SQL 中做这个结构,它会给我连接值。
不过,我想创建一个层次结构 - 一个具有许多订单详细信息的订单记录(甚至作为元组)。我只是无法理解它。我已经尝试了不同级别的各种代码块,但它不起作用。
let orders =
query {
for o in ctx.Dbo.Orders do
for od in o.``dbo.OrderDetails by id`` do
select (o , od)
} |> Seq.map (fun (o,od ) -> o.MapTo<Order>(), od.MapTo<OrderDetail>()) |> Seq.toList
orders
解决方案
我认为groupJoin
查询运算符是为此目的而设计的,但SQLProvider 似乎不支持它。相反,您可能必须执行以下操作:
let orders =
query {
for o in ctx.Dbo.Orders do
let ods =
o.``dbo.OrderDetails by OrderID``
|> Seq.toArray
select (o, ods)
}
for (o, ods) in orders do
printfn "Order %A: %A details" o.OrderId ods.Length
这导致每个订单有一行,每个订单都有一系列详细信息,这就是我认为您所要求的。输出如下:
Order 10248: 3 details
Order 10249: 2 details
Order 10250: 3 details
Order 10251: 3 details
Order 10252: 3 details
Order 10253: 3 details
Order 10254: 3 details
Order 10255: 4 details
...
推荐阅读
- mysql - 三个节点之间的mysql复制(主主复制和一个定向从属)
- python - 数据框之间的numpy比较
- python - 需要 REGEX 帮助在关键字之间返回多行
- python - 使用python将Json Key_value转换为标准输出
- android - 标签中缺少属性“文件名”
由命名空间 'urn:xmpp:http:upload:0' 限定 - sql - 为不同的名称sql server提供唯一的ID
- c# - 是否可以使用 System.Threading.Timer 运行异步任务?
- docker - 将带有 Yii 的 docker 容器连接到带有 MySQL 服务器的非链接 docker 容器
- angular - 在 Angular 中运行幽灵
- javascript - 遍历两个不同的 firebase-database 引用