C#如何转<t>和表达式<func <t,string =“”>&gt;选择器进入T.Select(选择器)?</func <t,> </t>

时间:2011-12-16 17:11:20

标签: linq c#-4.0

以下是我做了多远。我需要将Expression<Func<T, string>>作为参数而不是Func<T,string>发送到Get函数,并且仍然可以使用Select()。这很容易吗?格式为LinqPad

void Main()
{
    // Setup sample data in wholelist
    var wholelist = new List<Example>();
    for (var a = 0; a < 10; a++)
    {   var t = new Example { id = a.ToString(), name = a.ToString() };
        wholelist.Add(t);
    }

    // Do the real work
    var names = Get<Example>( wholelist, p => p.name );
    // LinqPad shows content
    names.Dump();
}

public class Example
{
    public string id {get;set;}
    public string name {get;set;}
}

public static List<string> 
    Get<T>(IEnumerable<T> source, Func<T, string> selector)
{    
    var list = source.Select<T,string>(selector).ToList();
    return list;
}

原因是因为我们有很多函数已经用Expression<Func<T,string>>调用了这个函数。

1 个答案:

答案 0 :(得分:2)

你有没有尝试过expression.Compile?

public static List<string> Get<T>(IEnumerable<T> source, Expression<Func<T, string>> selector)
{
    var list = source.Select<T, string>(selector.Compile()).ToList();
    return list;
}