2009-10-13 7 views
3
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 쿼리를 수행하려고합니다.필드의 최대 값을 반환하는 LINQ 식을 작성하는 방법은 무엇입니까?

감사합니다.

답변

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; 
    } 
+0

고마워요. 정확히 내가 찾고 있던 것이 었습니다. –

2
int num = MyDatas.Select(d => d.Value1).Max(); 

편집 :

대신 배열로 Value를 저장 할 수 있습니다.

+0

하하, 빠른 추첨; 내 것을 지워야했다! – gn22

+0

응답 해 주셔서 감사합니다. GetMaxValue 메서드 내에 복제하고 싶지 않은 추가 논리가 있습니다. 그 방법 내에서 내가 어떻게 할 수 있을지 전혀 모르겠다. –

+0

무슨 뜻인가요? –

관련 문제