2011-12-01 20 views
3

我有一些LINQ查詢(或基於LINQ查詢的IQueryable<T>對象),並希望根據此查詢獲取一些唯一字符串。將IQueryable <T>或LINQ查詢轉換爲唯一字符串

我有,例如:

var someValue = 10; 
var query = (from i in db.Customers 
      where i.Id == someValue 
      select i).AsQueryable(); 

我應該得到的東西是這樣的:

「在db.Customers從哪裏i.Id == 10」

我正在嘗試使用Expression對象並使用它,但我無法獲得通用方法來獲取字符串確切參數值。

例如爲:

public string GetKey<T>(IQueryable<T> query) 
{ 
    ... 
    return unique_string; 
} 

注意,對於同樣的LINQ查詢不同的參數值,應提供不同的字符串。

在此先感謝。

回答

3

我強烈懷疑這根本不起作用。除了別的,如果你必須使用AsQueryable(即,如果你原來的查詢是在IEnumerable<T>那麼編譯器將已經使用了代理,而不是表達式樹的開始。

如果它是一個IQuerable<T>一路,你可以嘗試使用query.Expression.ToString(),但坦率地講它不是我想要依靠。

0

解決這一問題Expression Tree Serialization有一些改進用於獲得傳遞的參數的精確值。它提供了一個大的,但獨特基於XML的文件在IQueryable對象上。