一千萬個為什麽

搜索

如何獲取Linq Expression的值

我有一個方法,采取表達式類型參數,在我的方法中,我想獲得此表達式的值,但不能找到熱點來做到這一點。

private User GetUser(Expression> 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 ==電子郵件 我將調用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("[email protected]")); //or
var another = GetUser(u => u.Username.Contains("bar"));

他會認為他是正確的,但事實上你的方法不會給他理想的結果!那麽你可以說“沒關系,我會告訴他們這個改變”,但是你退出這個團隊/公司後的日子呢?如果一個方法的行為不像它的聲明,那就太噩夢了。

轉載註明原文: 如何獲取Linq Expression的值