J'ai une méthode qui prend un paramètre de type d'expression, dans ma méthode, je veux obtenir des valeurs de cette expression mais que je ne peux pas trouver chaud pour le faire.
GetUser(u => u.Username == username); GetUser(u=> u.Email == email);
4 Réponses :
Peut-être que vous devriez utiliser LINQ pour SQL. C'est exactement ce que vous voulez: déchirez l'expression et voyez quels champs et comparaisons dont vous avez besoin. Je ne suggère pas de faire cela manuellement, mais si vous le souhaitez, puis regardez les membres d'une classe d'expression, c'est un arbre d'expression et aura des nœuds comme l'accès à la propriété et la comparaison. P>
où code> accepte
func
expression code>. Vérifiez un exemple:
class Program
{
private static List<int> l = new List<int> { 1, 2, 3, 4, 5 };
static void Main(string[] args)
{
Console.WriteLine(GetNum(x => x > 3));
Console.ReadKey();
}
private static int GetNum(Func<int, bool> predicate)
{
return l.Where(predicate).FirstOrDefault();
}
}
Je ne pense pas que c'est ce que l'OP recherche. Si vous lisez la fin de la question, YUCEL veut appeler différentes Sprates sur la base de laquelle le paramètre est vérifié.
où code> accepte une expression
code>
L'expression peut être réduite à plusieurs expressions.
var result = GetUser(u => u.Email.Equals("abc@foo.com")); //or var another = GetUser(u => u.Username.Contains("bar"));
Pourrait également vouloir vérifier que l'opérateur est égal. Ne me souviens pas de la main comment faire ça, mais je sais que cela peut être fait (et probablement) être fait.
Vous pouvez en théorie marcher l'arborescence d'expression dans Cependant, je suggérerais que si vous utilisez des SP spécifiques pour effectuer l'interrogation, l'utilisation d'une expression n'est pas vraiment la voie à suivre - créant un Query.body code> pour déterminer l'intention de la fonction - dans ce cas, il s'agira d'un
binarinexpression code> dans lequel vous " Je dois vérifier le
gauche code> et
droit code> pour voir ce qui est comparé. p>
getuserbyusername distinct
getUser code> avec une expression inattendue. P>