2013-07-15 68 views
0

對於描述我很抱歉。我的英語不是很好。讓我試着再次描述它。C#表達式列表包含

假設我將LamdaExpression作爲名爲FindProducts的方法的參數。現在我需要在FindProducts方法中解析這個參數,現在我遇到的問題是,當參數類似於下面的代碼(Listn.Contains())時,我無法從該參數列表中獲取值:

var sFilter = new List<string>(){"AFilter", "BFilter"}; 
myObj.FindProducts(s => sFilter.Contains(s.Name)); --- Here the parameter is an expression 

我的問題是我如何獲得列表sFilter(AFilter和BFilter)方法FindProducts中的值?

我想要做的就是解析此表達式,然後將其轉換爲SQL腳本。在我的情況下,我想要做的就是這樣:FindProducts(s => filterList.Constains(s)),這裏我會嘗試解析S作爲列名,filterList應該在SQL中的子句中。最後,我會讓我的SQL是這樣的:從表中選擇*,其中S在(「A」,「B」),這是從表達

+1

你能更清楚一點你在這裏做什麼?我已經閱讀了幾次這個問題,並且無法理解它。 – Ocelot20

+4

對我來說,這是完全不清楚你想在這裏實現什麼。如果此評論得到了回覆,請考慮改述您的問題。 –

回答

0

最後我想通了。我只是在表達式中初始化List。然後我將它解析爲ListInitExpression並獲取值。代碼如下:

myObj.FindProducts(s => new List<string>() { "AFilter", "BFilter" }.Contains(s.Name) && s.FactoryID==4) 
0

試試這個(如果我正確地解釋你的問題):

var productList = new List<string>() {"A", "B", "C", "D", "E"}; 
var filterList = new List<string>() {"A", "B"}; 

var foundList = FindProducts(productList, s => filterList.Contains(s)); 

List<string> FindProducts(List<string> products, Func<string,bool> filter) { 
    return products.Where(s => filter(s)).ToList(); 
} 
+0

這不適用於我的情況。 FindProducts只能接受一個表達式的參數。在FindProducts方法中,我必須解析這個Expression,然後將其轉換爲SQL腳本。在我的情況下,我想要做的就是這樣:FindProducts(s => filterList.Constains(s)),這裏我會嘗試解析S作爲列名,filterList應該在SQL中的子句中。最後,我會這樣做我的SQL:select * from TABLE其中S('A','B') –

+0

然後使'productList'成爲一個字段或屬性而不是局部變量。 –

+0

但是,如何將值設置爲表達式中的此字段或屬性? –