如何将Expression Func <t,object [] =“”>转换为Func <t,object =“”>

时间:2017-08-17 08:52:26

标签: c# linq

我有一个需要在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})
}

1 个答案:

答案 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;
}