0

LINQ で別の関数の戻り値を与える方法。

私はのを持っていIEnumerableますobjects(Say ObjColl)。そのオブジェクト コレクションから、別の の戻り値に基づいてオブジェクトをフィルター処理する必要がありますfunction(say GetObjPropertyValue)。私の最終的な出力は、オブジェクトとそのプロパティ値のディクショナリである必要があります。このディクショナリには、propertyvalue が何もないオブジェクトを含めることはできません。

GetObjPropertyValue関数はオブジェクトを入力として受け取り、そのプロパティを文字列として返します。ただし、そのプロパティがオブジェクトに存在しない場合、何も返さない場合があります。

私のクエリは次のようなものです。

Dictionary(obj, string)=ObjColl.Where(Function(p) not GetObjPropertyValue(p) is nothing)

しかし、上記のクエリでは、GetObjPropertyValue(p) の戻り値を格納するコードを記述し、obj-p と returnValue の組み合わせを辞書に追加する必要があります。どうやって書くの??

たとえば、以下のコードを参照してください。

コードの下の最後の行が間違っています。しかし、それを修正する方法を教えてください。私の意図は、GetFruitColor が何もない (空または有効な文字列である可能性がある) すべての果物の各フルーツ名とその色 (他の関数呼び出しによって返される) の出力コレクション (辞書など) が必要なことです。

[コード] プライベート関数 GetFruitColor(fruit) as string '果物の色を返します。'有効な果物と色が利用できない場合、""(空の文字列)を返します。'果物が有効な果物でない場合、何も返しません。終了機能

private sub MyMethod()
  Create a list of strings.
        Dim fruits As New List(Of String)(New String() _
                                {"apple", "passionfruit", "banana", "mango", _
                                 "orange", "blueberry", "grape", "strawberry"})

Dim query = _fruits.Where(Function(fruit) k= GetFruitColor(fruit) if not k is nothing select fruit, k) 
End Sub

上記のコードでは、最後の行が間違っています。getFruitColor を に入れる方法k、それを修正して値を保存し、k果物とk値の辞書として出力する方法。

4

1 に答える 1

1

私は提案します:

  • (果物、色) で構成される匿名型への射影
  • 「何もない」色を除外する
  • 辞書を作成

C# では、次のようになります。

var query = fruits.Select(fruit => new { fruit, color = GetFruitColor(fruit) })
                  .Where(pair => !string.IsNullOrEmpty(pair.color))
                  .ToDictionary(pair => pair.fruit, pair => pair.color);

VBに合わせて調整してください:)

于 2012-04-04T16:29:14.020 に答える