有没有办法从lambda表达式中调用函数?
我们目前有以下
var obj = m.Select(x => x.ToDictionary(y => y.ColumnName, y => y.ColumnValue))
.ToList();
private static string BuildNewContent(EnumColumnType columnType, String columnValue, List<TableColumn> CurrentRow)
{
}
所以我们真正想做的是将BuildNewContent的返回值添加为字典的值。 如下所示: -
var obj = m.Select(x => x.ToDictionary(y => y.ColumnName, BuildNewContent(y => y.ColumnType, y=> y.ContentValue, y)))
.ToList();
我意识到我们可以通过简单的循环轻松实现这一点,但是,我们希望看到如何使用Lambda(如果可能)这样做
UPDATE - 根据要求,M的类型是TableViewModel,它是一个嵌套列表
public class TableViewModel
{
public List<List<TableColumn>> Grid { get; set; }
}
public class TableColumn
{
public TableColumn() { }
public TableColumn(string columnHeader, string columnValue, int columnWidth, EnumColumnType columnType, string columnName)
{
this.ColumnHeader = columnHeader;
this.ColumnValue = columnValue;
this.ColumnWidth = columnWidth;
this.ColumnType = columnType;
this.ColumnName = columnName;
}
public string ColumnHeader { get; set; }
public string ColumnName { get; set; }
public string ColumnValue { get; set; }
public int ColumnWidth { get; set; }
public EnumColumnType ColumnType { get; set; }
}
答案 0 :(得分:5)
你几乎没错了
var obj = m.Select(x => x.ToDictionary(
y => y.ColumnName, y => BuildNewContent(y.ColumnType, y.ContentValue, y))).ToList();
但是我怀疑您要提供y
或其他值的最后一个x
参数,因为y
可能不是List<TableColumn>
类型
答案 1 :(得分:1)
您尝试过的问题只是BuildNewContent
方法的参数 - 当它们应该只是值时,您提供lambda表达式。所以我怀疑你想要:
var obj = m.Select(x => x.ToDictionary(y => y.ColumnName,
BuildNewContent(y.ColumnType, y.ContentValue, y)))
.ToList();
目前尚不清楚y
的类型是什么,所以很难知道这是否真的会立即起作用,但是在lambda表达式中调用方法肯定完全可行
但是,如果m
类似于LINQ to SQL表,那么将在执行时失败 - 在这种情况下,LINQ提供将需要尝试转换表达式树(编译器已经从lambda表达式创建到SQL中,并且它不知道BuildNewContent
的意图。如果它只是LINQ to Objects,那很好。