2012-04-04 14 views
0

LINQに別の関数の戻り値を与える方法。別の関数の戻り値を取得するには?

IEnumerableobjects(Say ObjColl)です。そのオブジェクトコレクションから、別のfunction(say GetObjPropertyValue)の戻り値に基づいてオブジェクトをフィルタリングする必要があります。私の最終的な出力は、Dictionary of objectとそのpropertyValueでなければなりません。この辞書は、propertyvalueが何もないオブジェクトを持つべきではありません。

GetObjPropertyValue関数は、Objectを入力として受け取り、そのプロパティをstringとして返します。しかし、オブジェクトにそのプロパティが存在しない場合は何も返しません。

私のクエリは、

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

のようなものであるが、上記のクエリで私はGetObjPropertyValue(P)の戻り値を格納し、辞書にOBJ-pとのReturnValue組み合わせを追加するコードを記述する必要があります。それを書く方法?

例のコードの下を参照してください:コードの下

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

[コード]私的関数GetFruitColor(フルーツ)を文字列として 'フルーツカラーを返します。 '有効な果物と色が利用できない場合、 ""(空文字列)を返します '果物が有効でない場合、果物は何も返しません。上記のコードで終了機能

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 

最後の行が間違っています。だからkにgetFruitColorを入れて、それを修正してkの値を保存し、果実とkという値の辞書として出力する方法を教えてください。私はお勧めし

答えて

1

:(果物、色)からなる匿名型へ

  • プロジェクト
  • "何もない" 色をフィルタリング
  • C#では辞書

を作成し、これはですbe:

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

VBに応じて調整:

+0

優れた答えJon Skeet。それは私に正しい解決策を与えます。助けてくれてありがとう。 – kothasiva

関連する問題