c# - 将 Func<T, string>[] 转换成 Func<T, string[]>?

标签 c# .net linq generics

考虑这个类:

public class Column<T>
{
    public string Header { get; set; }
    public Func<T, string> ValueExpression { get; set; }
}

这样使用:

var columns = new List<Column<Employee>>
              {
                  new Column<Employee> {Header = "Employee Id", ValueExpression = e => e.EmployeeID.ToString()},
                  new Column<Employee> {Header = "Name", ValueExpression = e => e.FirstName + " " + e.LastName},
                  new Column<Employee> {Header = "Employee Birthday Year", ValueExpression = e => e.BirthDate.HasValue ? e.BirthDate.Value.Year.ToString() : ""},
                  new Column<Employee> { Header = "test", ValueExpression = e => e.Address}
              }

我想在 IQueryable 上执行 .Select() 以使其仅从数据库中检索所需的字段。

所以我想做这样的事情:

var expressions = columns.Select(c => c.ValueExpression).Combine();
IQueryable<Employee> employees = EmployeeRepository.GetEmployees();
employees = employees.Select(expressions);

只有“Combine()”显然不存在.. :-)

最佳答案

public static Func<T, U[]> Combine<T, U>(this Func<T, U>[] functions) {
    return t => functions.Select(fun => fun(t)).ToArray();
}

我会声明通用 IEnumerable<Func<T, U>>而不是数组:

public static Func<T, IEnumerable<U>> Combine<T, U>(this IEnumerable<Func<T, U>> functions)
{
    return t => functions.Select(fun => fun(t));
}

如评论中所述,这不太可能直接与 LINQ to SQL 一起使用。但是,您可以通过执行 .AsEnumerable() 来获取 LINQ to SQL 结果。并在客户端处理其余部分。

关于c# - 将 Func<T, string>[] 转换成 Func<T, string[]>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/887830/

相关文章:

mysql - 如何忽略表 1 中的记录(其 fk 引用必须存在于表 2 中)但条件不满足

c# - SQL 图像数据类型 - C# 显示输出

c# - 是否所有的局部变量都入栈

c# - 拥有多个 WCF 项目与具有多个服务的 1 个 WCF 项目

.net - .net终结器是否始终执行?

c# - 用于选择两个集合之间的公共(public)元素的 Linq 语句

c# - 如何将列表的属性收集到 C# 中的另一个列表?

c# - 是否可以覆盖隐藏的方法?

c# - 我可以强制筛选按钮显示在我的 DataGridView 列标题上吗?

.net - 如何在 C++ 中正确使用链接器/SOURCELINK 选项