2009-08-14 12 views
1

私はコレクションからプロパティ値のリストを返す関数があります:私は私が私が予想たいフィールドを決定できるようになるジェネリック版を持っているしたいと思いますFuncパラメータを使用してLINQ SelectMany投影を設定するにはどうすればよいですか?

public static List<string> GetSpeakerList() 
    { 
     var Videos = QueryVideos(HttpContext.Current); 
     return Videos.Where(v => v.Type == "exampleType" 
      .SelectMany(v => v.SpeakerName) 
      .Distinct() 
      .OrderBy(s => s) 
      .ToList(); 
    } 

を - と言う代わりにSpeakerName Video.LengthまたはVideo.Typeを選択できるようにしたいと思います。

私はSelectManyがFuncをとることを理解していますので、この関数にパラメータとして渡すことができるようにFuncを構成できるようにするにはどうすればよいですか?

答えて

5

メソッドにパラメータとして関数を追加します。

public static List<string> GetVideosAttribute(Func<Video,string> selector) 
{ 
    var Videos = QueryVideos(HttpContext.Current); 
    return Videos.Where(v => v.Type == "exampleType" 
       .Select(selector) 
       .Distinct() 
       .OrderBy(s => s) 
       .ToList(); 
} 


var speakers = GetVideosAttribute(v => v->SpeakerName); 
var topics = GetVideosAttribute(v => v->Topic); 
+0

私がいることを実行したときに、私は次のエラーを取得する:方法について エラー型引数のSystem.Linq.Enumerable.SelectMany (System.Collections.Generic.IEnumerable を、 System.Func >) 'を使用から推測することはできません。型引数を明示的に指定してみてください。 –

+2

実際には、あなたが実際にスピーカー名、タイプ、または長さのコレクションを選択していないので、SelectManyが必要ではないと思います。それぞれのプロパティから1つのプロパティを選択するだけです。 SelectManyをSelectに変更すると機能します。 – tvanfosson

+1

より正確には、列挙の各要素から要素のコレクションを選択する場合は、SelectManyを使用します。使用列挙内の各要素から単一のプロパティを選択する場合に選択します。 – tvanfosson

関連する問題