<@[for i in linq.TrueIncidents -> i.RecTime, i.Name, (if i.Description = null && i.ID.HasValue = false then i.Message else "hello") ] @>
作品
<@[for i in linq.TrueIncidents -> i.RecTime, i.Name, (if i.Description = null && not <| i.ID.HasValue then i.Message else "hello") ] @>
不起作用
在linq2sql中“不”有效吗?还是一个bug?
答案 0 :(得分:2)
我认为这是对LINQ翻译器的F#引用的已知限制。据我所知,翻译者在编写时会留下子表达式(例如if .. then
中的条件或yield ..
后面的表达式),因此您只能使用C#理解的结构。
处理流水线操作的唯一地方是写:
<@ source |> Seq.filter (...) |> Seq.etc (...) @>
您可以在源代码中看到 - 在LinqQueries.fs中搜索CallPipe
。这肯定有点不幸,因为|>
和<|
都可以通过用它们的定义替换它们来处理(这很简单)。我相信这将在下一个F#版本中得到改进,因此您可以通过 microsoft dot com 向 fsbugs 发送电子邮件,以确保此错误无效不要迷路。