f# - F# 查询表达式嵌套列表
问题描述
我正在尝试查询每个包含与会者列表的事件列表。我在 EF db 上下文中使用查询表达式。我设法做到了这样:
let events =
query {
for event in db.Events do
leftOuterJoin ea in db.EventAttendances
on (event.Id = ea.EventId) into result
for ea in result do
select ({|Id = event.Id
Description = event.Description
DateTime = event.DateTime
|}, {| FirstName = ea.Member.FirstName
LastName = ea.Member.LastName
IsAttending = ea.IsAttending |})
}
|> Seq.toList
|> List.groupBy (fun (e, _) -> e)
|> List.map (fun (e, attendees) ->
{ Id = e.Id
Description = e.Description
DateTime = e.DateTime
Attendees = attendees
|> Seq.map(fun (_, a) ->
{ FirstName = a.FirstName
LastName = a.LastName
IsAttending = ea.IsAttending })
|> Seq.toList
} )
我习惯用 EF 来做这件事,所以整个groupBy
事情对我来说似乎有点麻烦。有没有更聪明的方法来做到这一点?
解决方案
你在做什么几乎就是做什么groupJoin
。
let events =
query {
for event in db.Events do
groupJoin ea in db.EventAttendances on (event.Id = ea.EventId) into result
select (event, query { for ea in result do
select { FirstName = ea.Member.FirstName
LastName = ea.Member.LastName
IsAttending = ea.IsAttending } })
}
|> Seq.map (fun (e, attendees) ->
{ Id = e.Id
Description = e.Description
DateTime = e.DateTime
Attendees = attendees |> Seq.toList })
|> Seq.toList
推荐阅读
- api - Microsoft Graph API odata $filter 查询似乎不起作用
- azure-devops - 在 TFS 到 DevOps 迁移期间修复损坏的 TFS 工作项链接
- javascript - 获取已挂载的 vueJs 中图像的大小
- python - Python Google Spreadsheet API 气泡图未正确显示
- typescript - 在 svelte 文件中导出 typescript 类型
- html - 当我在 Django 中使用“扩展”和“阻止”时,我的 CSS 没有出现
- mongodb - 在 Upsert 操作中来自 MongoDB 的重复键错误
- python - 来自 Python 的 Rofi 通行证列表
- git - 如何使 zsh 完成显示所有参数?
- c - 如何让 C 程序等待几秒钟?