我有一本字典:
<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。
我怎么能这样做?
答案 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
这可能会给你一个开始的地方。您需要解决的一件事是确定哪些字段是数字的,并且在尝试应用过滤器之前应将其转换为数字类型。否则你将比较为字符串。