以下是我做了多远。我需要将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>>
调用了这个函数。
答案 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;
}