VB.net(VS 2012)で正常に動作する次のコードがあります。m.ListenがIObservable(Maybe(of NominalObject))を返していることに注意してください
Dim d As IDisposable = (From x In m.Listen(Of Maybe(Of NominalObject))()
From y In x
Select New LAPViewCommands(y)).
BindToControl(Me, Function(x) x.ViewModel)
d.DisposeWith(Me)
これはカスタムユーザーコントロールの一部であり、IObservablesをモデルにバインドするための拡張メソッドがいくつかあります。ただし、詳細は関係ありません。コードをに変更すると
(From x In m.Listen(Of Maybe(Of NominalObject))()
From y In x
Select New LAPViewCommands(y)).
BindToControl(Me, Function(x) x.ViewModel).
DisposeWith(Me)
コンパイルエラーが発生しました。流暢な構文には問題がないことに注意してください。
m.
Listen(Of Maybe(Of NominalObject)).
SelectMany(Function(x) x.Select(Function(y) New LAPViewCommands(y))).
BindToControl(Me, Function(x) x.ViewModel).
DisposeWith(Me)
この問題はVB.NETパーサーの奇妙なエッジケースですか、それともここで重要な何かが欠けていますか?要約すると、質問はです。LINQクエリ式を括弧で囲んでから、voidを返す流暢な拡張メソッドを使用できないのはなぜですか