2014-09-05 202 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 

,可能会给你一个地方开始。你需要解决的一件事是确定你的哪些字段是数字的,并且在尝试应用你的过滤器之前应该转换为数字类型。否则,你会比较字符串。