比较两个列表并将匹配列保存到单独的列表中

时间:2013-02-04 18:58:41

标签: c# linq list lookup

我解析文件并将结果保存到C#中的列表中。然后我将数据库查询的所有结果解析到另一个列表。我想比较匹配的两个列表,并将结果保存到另一个列表以写入输出文件。我认为比较两个列表比每次为每个人运行查询更快更好,因为它们在文件中大约是16k记录。

列表1.列表fileList包含以下数据类型:string personsName

列表2.列表DBresults包含以下数据类型:string personsName,string address,string phoneNumber

尝试将列表1与列表2进行比较以查找匹配项,然后将结果发送到另一个列表以写入输出。 它们可能是列表2中每个人的多个结果,所以我需要找到每个实例。

从这样的LINQ查询开始,但我不是LINQ的主人,所以我需要一些帮助。

var matches = fileList.Where(a=>a.personsName == DBResults.where(s=>s,personsName).toList();

如果您认为可能有更快的方法,我也会接受其他建议。我知道IDctionarys和Hashtables是快速查找表但我有三种数据类型所以我不能做一个keyvaluepair。

1 个答案:

答案 0 :(得分:6)

如果我正确理解您的问题,解决方案就是LINQ Join方法。

var result = (from a in fileList
              join s in DBResults on a.personsName equals s.personsName
              select s).ToList();

或使用扩展方法语法:

var result = fileList.Join(DBResults, a => a.personsName, s => s.personsName, (a, s) => s).ToList();

此方法速度极快,内部使用HashSet来提高性能。

相关问题