2011-12-16 68 views
0

以下是我做了多少。我需要發送Expression<Func<T, string>>作爲參數而不是Func<T,string>到Get函數,並且仍然有Select()工作。這很容易嗎?這是格式爲LinqPadC#如何將<T>和Expression <Func <T, string>>選擇器轉換爲T.Select(選擇器)?

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>>功能。

回答

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; 
} 
+0

太棒了。我知道這一定很簡單。 – 2011-12-16 17:28:42

相關問題