我有一个需要在linq查询中选择的字段数组。
这些字段格式为Expression<Func<T, object[]>>
。(字段数组)
(我不能改变这个,其他代码需要保留字段的顺序)
我需要将其转换为可用于IQueryable<T>
中的选择器。
但是怎么做呢? 我该如何实现GetSelector()函数?
var fields = GetFields<Employee>(e => new[] { e.Name, e.Street });
var selector = GetSelector(fields);
var result = await qry.Select(selector).ToListAsync();
GetFields函数:
private Expression<Func<T, object[]>> GetFields<T>(Expression<Func<T, object[]>> fields)
{
return fields;
}
GetSelector函数:
private Expression<Func<T, object>> GetSelector<T>(Expression<Func<T, object[]>> fields)
{
//How to convert?
//It should return somehting like this: (e => new {e.Name, e.Street})
}
e.Name
和e.Street
)。您可以尝试执行委托,然后使用反射分析返回的对象类型(即匿名类型),但这听起来更像是一种解决方法(而且可能容易出错)......因此,我想您要么需要更改GetFields()
的签名以使用表达式而不是委托,要么找到完全不同的解决方案... - bassfader