0

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これはこの実装には適していません。

任意の解決策やヒントをいただければ幸いです。

4

1 に答える 1

0

x.DeleteExistingInstances無効のようです:

'DeleteExistingInstances' is not a member of Domain.ProductionWizard.ExtractionRoutineSelection'

それを修正すると、必要に応じて機能するはずです。

Tupleただし、代わりにKeyValuePair次を使用することをお勧めします。

Private Function GetSelectedExtractors() As List(Of Tuple(Of ExtractionMapping, Boolean))

    Return _extractionSelections _
        .SelectMany(Function(x) x.ExtractionRoutineSelection) _
        .Where(Function(x) x.Selected) _
        .Select(Function(x) Tuple.Create(x.ExtractionMapping, x.DeleteExistingInstances))
        .ToList()

End Function
于 2013-03-15T20:14:07.367 に答える