gpt4 book ai didi

c# - 如何将表达式 Func 转换为 Func

转载 作者:行者123 更新时间:2023-11-30 17:32:49 29 4
gpt4 key购买 nike

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

获取字段函数:

private Expression<Func<T, object[]>> GetFields<T>(Expression<Func<T, object[]>> fields)
{
return fields;
}

获取选择器函数:

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})
}

最佳答案

我不太确定 IQueryable 部分(请测试它),但是更改表达式签名非常容易,因为 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;
}

关于c# - 如何将表达式 Func<T, object[]> 转换为 Func<T, object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45730611/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com