使用查询字符串查询字符串列表?

时间:2014-09-05 15:18:56

标签: c# string list dictionary

我有一本字典:

<string,List<string>>

关键是产品代码说“product1”,然后列表是属性列表:

"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 个答案:

答案 0 :(得分: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

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