2014-04-22 10 views
5

Ho un semplice metodo che contiene una query per calcolare alcuni valori.Come potrei usare Func <> per modificare una singola condizione di una lambda

private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings) 
{ 
    return myThings.Where(x => x.Id == 1) 
     .Select(x => (x.ThisValue * x.That)) 
     .Sum(); 
} 

Il mio obiettivo è quello di modificare il metodo per permettere a me di specificare il campo x.ThisValue interrogato nell'oggetto.

Se dovessi specificare la clausola Where della mia query, potrei passare un predicato ma in questo caso, voglio solo modificare il valore di x.ThisValue.

private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings, Func<ThingsViewModel,bool> predicates) 
{ 
    return myThings.Where(predicates) 
     .Select(x => (x.ThisValue * x.That)) 
     .Sum(); 
} 

Idealmente, vorrei passare a qualcosa di simile:

MyQueryBuilderMethod(things, x.ThisOtherValue) 

risposta

4

seguente dovrebbe funzionare:

private decimal MyQueryBuilderMethod(List<ThingsViewModel> myThings, 
    Func<ThingsViewModel, decimal> thisValue) 
{ 
    return myThings.Where(x => x.Id == 1) 
     .Sum(x => (thisValue(x) * x.That)); 
} 

Ho anche sostituito il Select(...).Sum() dal più breve, ma equivalente Sum(...).

È quindi possibile chiamare come il seguente:

var result = MyQueryBuilderMethod(myThings, t => t.ThisValue); 
Problemi correlati