【发布时间】:2011-02-21 09:08:00
【问题描述】:
我已经将 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
与更新相同的错误消息:
<@ 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
错误信息:
The following construct was used in query but is not recognised by theF#-to-LINQ 查询转换器:调用 (没有任何, System.Collections.Generic.IEnumerable
1[System.Tuple2[System.DateTime,System.String]] Singleton[Tuple2](System.Tuple2[System.DateTime,System.String]), [NewTuple (PropertyGet (Some (a), System.DateTime Date, []), PropertyGet(一些(d),System.String AboveMessage, []))]) 这不是一个有效的查询 表达。检查规格 允许查询并考虑搬家 引用中的一些查询
已修复
代码:
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
更新同样的错误:
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])
错误信息:
查询中使用了以下构造,但未使用 由 F#-to-LINQ 查询识别 翻译:呼叫(无, System.Collections.Generic.IEnumerable`1[LinqBase.Dictionary] 单例字典, [cl1]) 这不是一个有效的查询表达式。检查规格 允许查询并考虑搬家 引用中的一些查询
固定
我不确定我是否正确,所以我还请你确认这是一个错误还是不是一个错误
【问题讨论】:
标签: linq-to-sql f#