如何通过Func参数设置LINQ SelectMany投影?

时间:2009-08-14 17:03:32

标签: c# linq

我有一个函数,它从集合中返回属性值列表:

    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可配置为允许将其作为参数传递给此函数的最佳方法是什么?

1 个答案:

答案 0 :(得分: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 );