【发布时间】:2015-03-10 15:38:27
【问题描述】:
这可能以前被问过,但我没能找到相同的场景。
我收到了一个包含单列字符串的庞大 SQL 数据集(即包含公司分支机构的城市)。
我还获得了一个更大的字符串主数据集(即世界上所有的城市)。
第一个数据集每天都在变化。我需要每天运行一次以检查是否可以在主数据集中找到每个字符串。
我无法控制任一数据集的设计。
我试过了:
Foreach (cityRow in dailyDS.Tables[0].Rows)
{
DataRow[] row = masterDs.Tables[0].Select("City like '%" + (string)cityRow["City"] + "%'");
}
并使用 linq(比 select 语句快得多)
Foreach (cityRow in dailyDS.Tables[0].Rows)
{
DataRow existingRow = masterDs.Tables[0].AsEnumerable().Where(row => row.Field<string>("City") == (string)cityRow["City"]).FirstOrDefault();
}
我的程序的整个目的是生成一个城市列表,其中当前有一个公司分支机构不在主城市列表中(即,它们拼写错误等)我已经编写了程序,但只是想要要知道:
在这样的数据集中搜索精确值的最有效方法是什么?
【问题讨论】:
-
您可以将城市字符串从
DataSet加载到HashSet<string>,如果您正在寻找完全匹配,那么只需执行companyCityHashSet.Except(AllCitiesHashSet).Any(),不确定您是否会获得任何性能改进,但你可以试试。 -
我试试看,谢谢!目前公司城市数据集中有超过 23,000 行!
-
这不是很多。我不确定您的代码中发生了什么,但这应该不会花费太多时间。
-
使用 linq 速度要快得多,这是导致最大延迟的 select 语句,我仍然想知道是否有比 linq 更快的东西
-
用您的 LINQ 代码更新您的问题,我也不确定您的确切要求是什么,如果您的分支 Cities 存在于所有城市 DataSet 中,您是否感兴趣?您对
DataSet的其他领域感兴趣吗?您的具体要求是什么?
标签: c# linq search dataset processing-efficiency