使用FUNC方法(选择器)返回列表的“轻型版本”

时间:2015-10-20 19:55:18

标签: c# linq func

我有一个可枚举的客户端列表,并希望返回我的客户端对象的轻量级“版本”:

IEnumerable<Client> clientList = blablabla. (data is fetched here)

return clientList.Select(b=> new CustomerSearchResult { Number= b.AccountNumber, Name = b.FirstName+" " +b.LastName , ...});

请注意,这是有效的,并且将基于ClientList

的customerSearchResult对象

我想创建一个FUNC(例如:CustomerSelector)来为每个客户端对象创建一个CustomerSearchResult(我的目标是避免为每个客户端列表手动设置属性):

前:

Expression<Func<Customer,CustomerSearchResult>> selector = (input) =>
new CustomerSearchResult
{
    Number= b.AccountNumber, 
    Name = b.FirstName+" " +b.LastName ,
    ...
};

...
... //CustomerList is previously populated
return CustomerList.Select(selector);

我收到以下错误:IEnumerable<Customer>不包含select

的定义

在这种情况下是否可以创建FUNC选择器?

1 个答案:

答案 0 :(得分:3)

问题是您正在使用表达式树 - IQueryable<T>(或更确切地说,Queryable定位IQueryable<T>中的扩展方法)使用的表达式树。对于Enumerable.Select,您需要代理人。只需将selector声明更改为:

即可
Func<Customer, CustomerSearchResult> selector = input => { ... }