我已经查询过关于SO的问题,但无法找到解决问题的方法。
在我的程序中是一个类,其唯一的原因是从通过构造函数传递给它的数据集合中进行选择。 我需要的是将LINQ查询传递给选择方法以从所述数据中进行选择。但是我没有运气解决我的问题。 这是代码:
public class ServiceClient<TInput>
{
private readonly IEnumerable<TInput> data;
public ServiceClient(IEnumerable<TInput> dataInput)
{
this.data = dataInput;
}
public TResult Send<TResult>(Func<IEnumerable<TInput>, TResult> selector)
{
var selectedData = this.data.Select(selector); // How to do the selection here???
// ...
}
}
以这种方式调用该类:
private static void Main(string[] args)
{
var persons = new List<Person>
{
new Person { Id = 0, FamilyId = 0 },
new Person { Id = 1, FamilyId = 0 },
new Person { Id = 2, FamilyId = 1 }
};
var func = new Func<IEnumerable<Person>, Person>(Target);
var client = new ServiceClient<Person>(persons);
client.Send(func);
}
private static Person Target(IEnumerable<Person> enumerable)
{
return enumerable.SingleOrDefault(p => p.Id == 0);
}
答案 0 :(得分:4)
替换:
var selectedData = this.data.Select(selector);
使用:
var selectedData = selector(this.data);
应该够了。
selector
是加入集合并返回单个元素的委托,因此您需要使用selector
参数调用data
委托。
如果您想使用Select
this.data.Select(..)
selector
,Func<TInput, TResult>
代表应该像{{1}} - 委托将一个元素投射到另一个元素中。
答案 1 :(得分:0)
您需要更改发送方式:
public TResult Send<TResult>(Func<IEnumerable<TInput>, TResult> selector)
{
return selector(data);
}