将 LINQ 查询传递给 select 动态表单集合的方法
Pass LINQ query to method to select dynamically form collection
我已经在 SO 上查看了这个问题,但找不到解决我的问题的方法。
在我的程序中有一个 class,其唯一原因是 select 从通过构造函数传递给它的数据集合中获取数据。
我需要做的是将 LINQ 查询从所述数据传递到 selecting 方法到 select。但是我没有运气解决我的问题。
这是代码:
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???
// ...
}
}
class是这样调用的:
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);
}
替换:
var selectedData = this.data.Select(selector);
与:
var selectedData = selector(this.data);
应该够了。
selector
是接受集合和 returns 单个元素的委托,因此您需要使用 data
参数调用 selector
委托。
如果您想像 this.data.Select(..)
一样使用 Select
,您的 selector
代理应该像 Func<TInput, TResult>
- 将一个元素投影到另一个元素的代理。
您需要更改发送方式:
public TResult Send<TResult>(Func<IEnumerable<TInput>, TResult> selector)
{
return selector(data);
}
我已经在 SO 上查看了这个问题,但找不到解决我的问题的方法。
在我的程序中有一个 class,其唯一原因是 select 从通过构造函数传递给它的数据集合中获取数据。 我需要做的是将 LINQ 查询从所述数据传递到 selecting 方法到 select。但是我没有运气解决我的问题。 这是代码:
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???
// ...
}
}
class是这样调用的:
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);
}
替换:
var selectedData = this.data.Select(selector);
与:
var selectedData = selector(this.data);
应该够了。
selector
是接受集合和 returns 单个元素的委托,因此您需要使用 data
参数调用 selector
委托。
如果您想像 this.data.Select(..)
一样使用 Select
,您的 selector
代理应该像 Func<TInput, TResult>
- 将一个元素投影到另一个元素的代理。
您需要更改发送方式:
public TResult Send<TResult>(Func<IEnumerable<TInput>, TResult> selector)
{
return selector(data);
}