2014-09-05 253 views
-1

我有一本字典:使用查詢字符串查詢字符串列表?

<string,List<string>> 

的關鍵是產品代碼說「產品1」,那麼該列表的屬性列表:

"Brand","10.40","64","red","S" 

然後我「可以」有規則列表/過濾器例如

var tmpFilter = new customfilters(); 
tmpFilter.Field = "2"; 
tmpFilter.Expression = ">"; 
tmpFilter.Filter = "10"; 

因此,對於上面的例子,這將通過在因索引2(tmpFilter.Field)它大於10;然後我有另一個對象,它定義了我想要寫入文件的列表中的哪些字段。對於那個字典項目,我只是想寫過濾器匹配的產品品牌和價格。

目前沒有過濾器我有:

var tmp = new custom(); 
tmp.Columns = "0,1"; 
tmp.Delimiter = ","; 
tmp.Extention = ".csv"; 
tmp.CustomFilters = new List<customfilters>() {new customfilters(){ Field = "2", Expression = ">", Filter = "10"} }; 

public static void Custom(custom custom) 
{ 
    foreach (var x in Settings.Prods) 
    { 
    //Get Current Product Code 
    var curprod = Settings.ProductInformation[x];// the dictionary value 

    foreach (var column in custom.Columns) 
    { 
     var curVal = curprod[Convert.ToInt32(column)]; 
     tsw.Write(curVal + custom.Delimiter); 
    } 
    Settings.Lines++; 
    tsw.WriteLine(); 
    } 
    tsw.Close(); 
} 

我只是想,如果所有的過濾器通過對字符串進行該列表寫curprod。

我該怎麼做?

+1

你已經有'customFilter'邏輯工作嗎?你怎麼實際上將它們應用到你的屬性列表? – 2014-09-05 15:27:04

+0

即時沒有應用過濾器邏輯的問題那時我該如何應用過濾器邏輯時選擇哪個「產品」寫入文件customfilters對象只是定義過濾器是自定義對象內的字段看到我的更新 – Houlahan 2014-09-05 15:31:09

+0

仍然不完全清楚你卡在哪個部分。你是問如何只選擇通過過濾器的項目(在這種情況下,你可以簡單地說'if(applyMyFilters(curprod))'applyMyFilters'是一個函數,將你的每個過濾器應用到'List '你傳遞它並返回true或false)還是你問如何實際使用自定義過濾器本身?換句話說,在你的例子中,如何讓'tmpFilter'實際測試列表中的第三項條件'> 10'? – 2014-09-05 15:36:08

回答

0

有根據微軟公佈的一個例子一個非常好的NuGet包,他們已決定把真的很難找到一些原因,允許動態LINQ查詢:

https://www.nuget.org/packages/System.Linq.Dynamic/1.0.2

來源:

https://github.com/kahanu/System.Linq.Dynamic

使用,你可以做這樣的東西很容易(注:我使用的字符串在這裏,因爲OP指出他們有一個List<string>):

List<string> stuff = new List<string> { "10.40", "64", "5", "56", "99", "2" }; 

var selected = stuff.Select(s => new { d = double.Parse(s) }).Where("d > 10"); 

Console.WriteLine(string.Join(", ", selected.Select(s => s.d.ToString()).ToArray())); 

輸出:

10.4, 64, 56, 99 

,可能會給你一個地方開始。你需要解決的一件事是確定你的哪些字段是數字的,並且在嘗試應用你的過濾器之前應該轉換爲數字類型。否則,你會比較字符串。