返回基于外键关系的查询结果

时间:2014-05-07 23:38:47

标签: f# type-providers

我正在使用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
    }

正确的方法是什么?

1 个答案:

答案 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中选择一些内容。