gpt4 book ai didi

c# - 如何获取 Linq 表达式的值

转载 作者:太空狗 更新时间:2023-10-29 23:11:00 27 4
gpt4 key购买 nike

我有一个采用表达式类型参数的方法,在我的方法中我想获取此表达式的值,但找不到这样做的热点。

private User GetUser(Expression<Func<User, bool>> query)
{
User user = Context.User.Where(query).FirstOrDefault();
return user;
}

我用不同的参数调用这个方法,比如

GetUser(u => u.Username == username);

GetUser(u=> u.Email == email);

我想更改 GetUser 方法以使用存储过程,但我需要找到查询参数中的内容

我想检查查询是否是 u.Username == username我会调用 GetUserByUsername SP如果查询是 u.Email == email我会调用 GetuserByEmail SP

最佳答案

表达式可以简化为多个表达式。

 var body = query.Body as BinaryExpression;
if (body != null)
{
var left = body.Left as MemberExpression;
if (left != null)
{
Console.WriteLine(left.Member.Name);
// You can get "Username" or "Email" here
}
}

顺便说一句,我认为你走错了方向。想一想这种情况:一些其他开发人员看到您的 GetUser 方法,并以这种方式使用它:

var result = GetUser(u => u.Email.Equals("abc@foo.com")); //or
var another = GetUser(u => u.Username.Contains("bar"));

他会认为他是正确的,但实际上你的方法不会给他理想的结果!那么你可以说“没关系,我会通知他们这个变化”,但是你离开这个团队/公司后的日子呢?如果一个方法的行为不像它的声明那样,那将是一场噩梦。

关于c# - 如何获取 Linq 表达式的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519615/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com