2009-10-13 4 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); 
    } 
} 

Comment implémenter GetMaxValue? Je veux lui donner un nom de propriété via un lambda et avoir GetMaxValue effectuer une requête LINQ Max.Comment écrire une expression LINQ qui retournera la valeur maximale d'un champ?

Merci!

Répondre

1

Si vous demandez comment utiliser l'objet d'expression, vous devez le compiler en premier. L'expression compilée elle-même n'est qu'un délégué, vous devez donc lui transmettre les données dont vous avez besoin. E.g. voici un exemple de ce que vous demandiez:

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

Merci - précisément ce que je cherchais. –

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

Edit:

Vous pouvez stocker le Value comme un tableau à la place.

+0

Haha, rapide sur le tirage; a dû supprimer le mien! – gn22

+0

Merci pour la réponse. Il y aura une logique supplémentaire dans la méthode GetMaxValue que je ne veux pas dupliquer. Une idée de comment je le ferais dans la méthode? –

+0

Que voulez-vous dire? –

Questions connexes