2011-03-29 43 views
1
<@[for i in linq.TrueIncidents -> i.RecTime, i.Name, (if i.Description = null && i.ID.HasValue = false then i.Message else "hello") ] @> 

工作不是<|不适用于linq2sql?

<@[for i in linq.TrueIncidents -> i.RecTime, i.Name, (if i.Description = null && not <| i.ID.HasValue then i.Message else "hello") ] @> 

不起作用里面LINQ2SQL

确实 “不” 的作品?或者它是一个错误?

+1

如果使用'not i.ID.HasValue'而不是''not <| i.ID.HasValue'? – kvb 2011-03-29 11:15:48

+0

@kvb是,没有<|它运作良好,因此必须只是因为'<|'用法。 – Cynede 2011-03-29 13:05:07

回答

2

我认为这是F#语句对LINQ翻译器的已知限制。据我所知,翻译器会在您编写子表达式时留下子表达式(例如,条件为if .. thenyield ..之后的表达式),因此您只能使用C#理解的构造。

其中流水线被处理的唯一的地方是,当你写:

<@ source |> Seq.filter (...) |> Seq.etc (...) @> 

你可以看到,在源代码 - 搜索CallPipeLinqQueries.fs。这肯定有点不幸,因为|><|都可以通过用它们的定义替换它们来处理(这很简单)。我相信这将在下一个F#版本中得到改进,因此您可以发送电子邮件到fsbugs微软com以确保此错误不会丢失。

+0

很好。头是最后(当前)的来源? – Cynede 2011-03-30 04:58:32

+0

@Bjorky:是的,头是最新的(公开可用的)版本。 – 2011-03-31 21:39:25

相关问题