public class MyData
{
public int Value1 { get; set; }
public int Value2 { get; set; }
public int Value3 { get; set; }
}
public class MyViewData
{
List<MyData> MyDatas = new List<MyData>();
public int GetMaxValue(Expression<Func<MyData, int>> action) {
// get highest value of specified field in MyDatas, return value
// pseudo code of what i'm looking for would be:
// return action.Max()
}
public void Test() {
int num = GetMaxValue(d => d.Value1);
}
}
如何实施GetMaxValue?我想通过lambda给它一个属性名称,让GetMaxValue执行LINQ Max查询。
谢谢!
答案 0 :(得分:2)
int num = MyDatas.Select(d => d.Value1).Max();
编辑:
您可能希望将Value
存储为数组。
答案 1 :(得分:1)
如果您询问如何使用表达式对象,则需要先编译它。编译后的表达式本身只是一个委托,因此您需要将所需的数据传递给它。 例如。这是你问的一个例子:
public int GetMaxValue(Expression<Func<MyData, int>> action)
{
if (MyDatas.Count == 0)
{
throw new InvalidOperationException("Sequence contains no elements");
}
Func<MyData, int> func = action.Compile();
int max = int.MinValue;
foreach (MyData data in MyDatas)
{
max = Math.Max(max, func(data));
}
return max;
}