我正在使用SqlDataConnection类型提供程序,我正在尝试根据相关表的查询结果找出查询表的适当方法。
我最初认为我可以这样做:
let myQuery =
query{
for row in db.StuffTable do
select row
}
let result =
myQuery
|> Seq.filter (fun x -> x.fkTable.contains( y.IsComplete = false ) // this obviously doesn't work
所以我开始思考这样的事情,但我不确定:
let reuslt =
query{
for pkRow in pkTable do
for fkRow in fkTable do
where (fkRow.IsComplete = false)
select pkRow
}
正确的方法是什么?
答案 0 :(得分:1)
您可能希望首先加入FK-PK对列,然后过滤所需的属性:
let result = query {
for fkRow in db.FkTable do
join pkRow in db.PkTable on (fkRow.FkColumn = pkRow.PkColumn)
where (pkRow.IsComplete = false)
select fkRow
}
在极少数情况下,您需要完全加入(两个表格的笛卡尔积),您可以这样做:
let result = query {
for fkRow in db.FkTable do
join pkRow in db.PkTable on (1 = 1)
where (pkRow.IsComplete = false)
select fkRow
}
,或使用OP建议的查询。但是,在这种情况下,为了使后一个查询有用,您还需要从pkTable
中选择一些内容。