LINQクエリを使用して、アイテムごとにブール値を追加してデータのコレクションを返す関数を変更する必要があるため、簡単にするために、戻り値の型をのリストに変更することにしましたKeyValuePairs
。しかし、私には解決できない、または残念ながら理解できないエラーがあります。
元のバージョンまたは機能は次のとおりです。
Private Function GetSelectedExtractors() As List(Of ExtractionMapping)
Return _extractionSelections _
.SelectMany(Function(x) x.ExtractionRoutineSelection) _
.Where(Function(x) x.Selected) _
.Select(Function(x) x.ExtractionMapping)
End Function
エラーのある新しいバージョンは次のとおりです。
Private Function GetSelectedExtractors() As List(Of KeyValuePair(Of ExtractionMapping, Boolean))
Return _extractionSelections _
.SelectMany(Function(x) x.ExtractionRoutineSelection) _
.Where(Function(x) x.Selected) _
.Select(Function(x) New KeyValuePair(Of ExtractionMapping, Boolean) _
(x.ExtractionMapping, x.DeleteExistingInstances))
End Function
私が受け取るエラーはこれです:
Overload resolution failed because no accessible 'Select' can be called with these arguments:
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of ExtractionRoutineSelection, Integer, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': Nested function does not have a signature that is compatible with delegate 'System.Func(Of ExtractionRoutineSelection, Integer, TResult)'.
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of ExtractionRoutineSelection, Integer, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of ExtractionRoutineSelection, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': 'DeleteExistingInstances' is not a member of 'Domain.ProductionWizard.ExtractionRoutineSelection'.
Extension method 'Public Function Select(Of TResult)(selector As System.Func(Of ExtractionRoutineSelection, TResult)) As System.Collections.Generic.IEnumerable(Of TResult)' defined in 'System.Linq.Enumerable': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.
私はC#でたくさんのLINQクエリを実行しましたが、VBではそれほど多くはないので、構文を理解している可能性があります。私はいくつかのバリエーションを試しましたが成功しませんでした。それをではなく匿名タイプに変換できますが、KeyValuePair
これはこの実装には適していません。
任意の解決策やヒントをいただければ幸いです。