2010-09-13 8 views
1

J'ai un sélecteur lambda, disons Func<T, TResult>. Est-il possible de le convertir en un prédicteur (Func<T, bool>) en utilisant un objet TResult comme référence?Comment convertir un sélecteur linq en prédicteur

Par exemple, convertir

x => x.Name 

dans

x => x.Name == customerName 
+0

Un grand merci à Steven, Timwi et Ani. Vos réponses sont toutes correctes. Mais je peux seulement marquer l'un des vôtres comme la réponse. Merci à tous! – Roy

Répondre

1

Essayez ceci:

Func<Person, string> projection = x => x.Name; 

Func<Person, bool> predicate = x => projection(x) == customerName; 
4

Quelque chose comme ça?

static Func<TInput, bool> CreatePredicate<TInput, TResult>(Func<TInput, TResult> selector, TResult comparisonValue) 
{ 
    return tInput => selector(tInput).Equals(comparisonValue); 
} 

Utilisation:

Func<Foo, bool> myPredicate = CreatePredicate(x => x.Name, customerName); 

Pourriez-vous nous en dire un peu plus sur la raison pour laquelle vous voulez faire?

1

Je suppose que vous vouliez dire

x => x.Name == customerName 

parce = est mission et je pense que vous voulez comparer.

La réponse est:

static Func<T, bool> MakePredictor<T>(Func<T, string> lambda, 
             string customerName) 
{ 
    return x => lambda(x) == customerName; 
} 
0
static Predicate<T> Predicate<T, TResult>(Func<T, TResult> selector, TResult value) { 
    return Predicate(selector, value, EqualityComparer<TResult>.Default); 
} 

static Predicate<T> Predicate<T, TResult>(Func<T, TResult> selector, TResult value, IEqualityComparer<TResult> comparer) { 
    if(selector == null) { 
    throw new ArgumentNullException("selector"); 
    } else if(comparer == null) { 
    throw new ArgumentNullException("comparer"); 
    } 

    return x => comparer.Equals(selector(x), value); 
} 
Questions connexes