繁体   English   中英

将Func <T,string> []转换为Func <T,string []>?

[英]Convert Func<T, string>[] into Func<T, string[]>?

考虑这个课程:

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结果,并在客户端处理其余部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM