基本上我在SQL表中有一些产品已经分组到某些类别。例如笔记本电脑,相机,MP3播放器等。现在当我采用其中一种产品(例如笔记本电脑)时,我需要根据它们的功能/选项进一步深入研究它们。 (示例 - RAM大小(1 GB,4 GB,..),处理器类型(Core i7,Core i3 ..),硬盘驱动器大小(250 GB,500 GB)等。最初我使用MSSQL的Contains('COLUMNNAME', 'FormsOf(Inflectional, SOMEWORD))
进行了这种分类。这种方法有效,但需要将近8小时才能完成数据库中的所有记录。 (300K记录)
所以现在我正在考虑基于Regex的实现。所以这就是我到目前为止所提出的。这个代码可能很清楚。
private static void Main(string[] args)
{
var productList = new Dictionary<string, string>
{
{"10101", "Samsung NF210 Netbook - 10.1ins - 1GB RAM - 250GB Hard Drive"},
{"10102", "Samsung NP-NF210 Netbook, Intel Atom 1.5GHz, 1GB RAM, 250GB with 10.1 Inch Display, Silver"},
{"10103", "Sony Vaio VPC-F13Z0E/B Laptop, Intel Core i7, 1.73GHz, 6GB RAM, 640GB with 16.4 Inch Display, Black"}
};
var featureList = new Dictionary<int, string>
{
{1, "1 GB"}, // RAM SIZE
{2, "2 GB"}, // RAM SIZE
{3, "250GB"}, // HARD DRIVE SIZE
{4, "640GB"}, // HARD DRIVE SIZE
{5,"Core i7"}, // Porcessor Type
{6,"Core i3"}, // Porcessor Type
{7,"Netbook"}, // Type
{8,"Laptop"} // Type
};
foreach (var feature in featureList)
{
var keyword1 = feature;
var results = from result in productList
where Regex.IsMatch(result.Value, keyword1.Value, RegexOptions.Singleline)
select result;
foreach (var result in results)
{
Console.WriteLine(feature.Key + " - " + feature.Value);
Console.WriteLine(result.Key + " - " + result.Value);
Console.WriteLine("");
}
}
Console.ReadKey();
}
现在我真正的问题是,这种方法是否有效?我知道我所做的方式不如SQL Contains
那么好,但似乎有效。还有其他建议吗?
答案 0 :(得分:1)
使用正则表达式是非常难以理解的,也是一个安全漏洞。
使用String.Contains
。