我正在尝试创建一种在数据表上运行一些动态 linq 的方法,我粘贴的代码是测试代码,而不是我正在处理的完整代码,但我认为这足以理解我正在尝试做的事情.
本质上,我想向该方法添加第二个参数,该参数将包含一个可用于替换 r => r.Field("field") 的表达式。
public string GetStringValueFromData(DataTable data)
{
switch (this.MethodType)
{
case (LabelMethodType.Count):
return data.AsEnumerable().Select(r => r.Field<string>("sometextfield")).Count().ToString();
case (LabelMethodType.Sum):
return data.AsEnumerable().Sum(r => r.Field<decimal>("somenumberfield")).ToString();
case (LabelMethodType.Average):
return data.AsEnumerable().Average(r => r.Field<decimal>("anotherfield")).ToString();
}
return string.Empty;
}
所以本质上该方法看起来像这样。但是当然我已经尝试过了,它甚至没有编译。
public string GetStringValueFromData(DataTable data, Expression<Func<DataRow, object>> expression)
{
switch (this.MethodType)
{
case (LabelMethodType.Count):
return data.AsEnumerable().Select(expression).Count().ToString();
case (LabelMethodType.Sum):
return data.AsEnumerable().Sum(expression).ToString();
case (LabelMethodType.Average):
return data.AsEnumerable().Average(expression).ToString();
}
return string.Empty;
}
有谁可能知道什么类型可以使这个参数起作用,所以它会接受类似 r => r.Field("sometextfield") 或 r => r.Field("somenumberfield") 或有建议替代方法。
谢谢
光盘