如何编写一个返回字段最大值的LINQ表达式?

时间:2009-10-13 22:45:39

标签: linq lambda

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查询。

谢谢!

2 个答案:

答案 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;
    }