我有一个需要在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})
}
答案 0 :(得分:1)
我对IQueryable
部分不太确定(请测试一下),但更改表达式签名非常简单,因为object[]
是object
private static Expression<Func<T, object>> GetSelector<T>(Expression<Func<T, object[]>> fields)
{
var result = Expression.Lambda<Func<T, object>>(fields.Body, fields.Parameters);
return result;
}