1

由于一些未知故障,每次我通过诺基亚套件将诺基亚的联系人与 Outlook 联系人同步时,手机上的每个联系人都会再次添加到 Outlook。我现在在 Outlook 中有多达四个联系人的副本。有些在不同的重复项中填充了不同的字段。

我想要做的是将我的联系人从 CSV 导入数据库表或内存对象集合中,然后将每个“唯一”记录的所有副本的属性合并到一个记录中,然后导入回一个空的联系人文件夹在展望中。有什么优雅的方法可以做到这一点,无论是在普通的 C#、LINQ 还是 T-SQL 中?

还是我只是遍历第一列的所有副本(行),并将找到的任何值复制到该列的空白或最新版本中,然后继续迭代到第二列直到最后一列?

4

1 回答 1

1

我的策略是首先将所有行分组到某个键上,例如new { FirstName, LastName }or EMail(我不知道您的数据是什么样的)。现在,您拥有属于同一个人的多组行。您现在需要合并它们(使用您喜欢的任何算法)。您可以选择最新的,也可以像这样合并单个属性:

from r in rows
group r by r.EMail into g
select new {
 EMail = g.Key,
 DateOfBirth = g.Select(x => x.DateOfBirth).Where(x => x != null).First(),
 ...
}

在这个例子中,我选择了第一个非空值作为DateOfBirth非确定性的。

于 2013-04-27T11:42:25.530 回答