问题几乎说明了一切。我有一个如下形式的大 flinq 查询:
for alias1 in table1 do
for alias2 in table2 do
if alias1.Id = alias2.foreignId
使用这种形式,如何在这两个表之间进行左外连接?
我认为你可以使用groupJoin
功能可在Query
模块。以下是使用 Northwind 的示例,其中 Products 作为主表,Categories 作为带外键的表:
open System.Linq
<@ Query.groupJoin
db.Products db.Categories
(fun p -> p.CategoryID.Value)
(fun c -> c.CategoryID)
(fun p cats ->
// Here we get a sequence of all categories (which may be empty)
let cat = cats.FirstOrDefault()
// 'cat' will be either a Category or 'null' value
p.ProductName, if cat = null then "(none)" else cat.CategoryName) @>
|> query
肯定有更好的方式来表达这一点seq { .. }
语法并通过使用嵌套实现类似连接的行为for
循环。不幸的是,LINQ 翻译器的引用可能不支持这些。 (就我个人而言,我更喜欢使用嵌套来编写代码for
并使用if
检查是否为空集合)。
我只是在研究 PowerPack 库中的一些改进,作为 F# 团队承包工作的一部分,所以这有望在未来得到改进......(但不承诺!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)