Linq to sql 是我的错误还是我的失败?

Linq to sql 是我的错误还是我的失败?,linq-to-sql,f#,Linq To Sql,F#,我已经把bug发送到了fsbugs@microsoft.com但是我还将此链接添加到信函中,以获得额外的描述、代码突出显示、讨论和也许有人会找到某种方法来避免它,因为我非常喜欢它并且想使用它 代码: <@ seq {for a in db.ArchiveAnalogs do for d in db.Deltas do if a.ID = d.ID then if a.Value > d.D

我已经把bug发送到了fsbugs@microsoft.com但是我还将此链接添加到信函中,以获得额外的描述、代码突出显示、讨论和也许有人会找到某种方法来避免它,因为我非常喜欢它并且想使用它

代码:

<@ seq {for a in db.ArchiveAnalogs do
            for d in db.Deltas do
                if a.ID = d.ID then
                    if a.Value > d.DeltaLimit then
                        yield a.Date, d.AboveMessage
                    else if a.Value < d.DeltaLimit then
                        yield a.Date, d.BelowMessage}
     @> |> query |> Array.ofSeq
    let px =
        query <| 
        <@ seq { for cl in db.Dictionaries -> cl }
                    |> Seq.filter(fun x -> x.ID_Line = l1 || x.ID_Line = l2) @>
        |> fun pquery ->
            query <|
            <@ seq { for cd in db.DeltaCompares do
                        for cl1 in pquery do
                                            if cd.IID1 = cl1.IID then
                                                for cl2 in pquery do
                                                    if cd.IID2 = cl2.IID then
                                                        yield cl1
                                                        yield cl2 } @>
            |> List.ofSeq
F#-to LINQ查询转换器:调用 (无, System.Collections.Generic.IEnumerable
1[System.Tuple
2[System.DateTime,System.String]] Singleton[Tuple
2](System.Tuple
2[System.DateTime,System.String]), [NewTuple(PropertyGet(Some(a),System.DateTime-Date,[]), PropertyGet(Some(d),消息上方的System.String, [])])这不是有效的查询 表情。检查设备的规格 允许查询并考虑移动 部分查询出了报价单

固定的

代码:

<@ seq {for a in db.ArchiveAnalogs do
            for d in db.Deltas do
                if a.ID = d.ID then
                    if a.Value > d.DeltaLimit then
                        yield a.Date, d.AboveMessage
                    else if a.Value < d.DeltaLimit then
                        yield a.Date, d.BelowMessage}
     @> |> query |> Array.ofSeq
    let px =
        query <| 
        <@ seq { for cl in db.Dictionaries -> cl }
                    |> Seq.filter(fun x -> x.ID_Line = l1 || x.ID_Line = l2) @>
        |> fun pquery ->
            query <|
            <@ seq { for cd in db.DeltaCompares do
                        for cl1 in pquery do
                                            if cd.IID1 = cl1.IID then
                                                for cl2 in pquery do
                                                    if cd.IID2 = cl2.IID then
                                                        yield cl1
                                                        yield cl2 } @>
            |> List.ofSeq
让px=
查询顺序过滤器(funx->x.ID_-Line=l1 | | x.ID_-Line=l2)@>
|>趣味问答->
查询列表.ofSeq
更新时出现相同错误:

   <@ seq {for a in db.ArchiveAnalogs do
                        for d in db.Deltas do
                            if a.ID = d.ID && a.Value > d.DeltaLimit then
                                yield a.Date, d.AboveMessage
                            elif a.ID = d.ID && a.Value < d.DeltaLimit then
                                yield a.Date, d.BelowMessage}
                 @> |> query |> Array.ofSeq
            let p =
                [for cl in db.Dictionaries -> cl]
                |> Seq.filter(fun x -> x.ID_Line = l1 || x.ID_Line = l2)
                |> fun pquery ->
                    <@ seq { for cd in db.DeltaCompares do
                                for cl1 in pquery do
                                    for cl2 in pquery do
                                    if cd.IID1 = cl1.IID && cd.IID2 = cl2.IID then
                                        yield cl1, cl2 } @>
                    |> query |> Seq.collect(fun a -> [fst a; snd a])
让p=
[对于数据库字典中的cl->cl]
|>顺序过滤器(趣味x->x.ID_线=l1 | | x.ID_线=l2)
|>趣味问答->
|>查询|>顺序收集(乐趣a->[fst a;snd a])
错误消息:

查询中使用了以下构造,但未使用 由F#to LINQ查询识别 翻译:呼叫(无, System.Collections.Generic.IEnumerable`1[LinqBase.Dictionary] 单音词典, [cl1])这不是有效的查询表达式。检查设备的规格 允许查询并考虑移动 部分查询出了报价单

固定的


我不确定我是否做得正确,所以我还要求您确认这是否是一个错误

第一种情况下,我认为F#to LINQ转换器可能在嵌套的
if
上失败。你试过:(…)

EDIT[第二次尝试]:它也可能失败,因为我们正在使用
if
而不使用
else
子句。如果您总是使用
选项
键入并过滤掉
值(可能有一种方法可以让它变得更好,但让我们从这个开始):


这是使用引号拼接。有关此功能的详细信息,(搜索拼接)。

更新代码后的错误仍然相同。毕竟我看到了一些可以手动添加的变通方法,但我找不到它们,也不知道这是否对我有帮助。@nCdy:我为第一个案例添加了另一个尝试。@nCdy。。。以及为什么第二个是错误的解释。(主要错误不是错误,但可能涉及其他错误)
let pquery = <@ db.Dictionaries
            |> Seq.filter(fun x -> x.ID_Line = l1 || x.ID_Line = l2) @>
let px = 
  <@ seq { for cd in db.DeltaCompares do
             for p in %pquery do ... } |> query