【问题标题】:Merge/union selected values of two object lists合并/联合两个对象列表的选定值
【发布时间】:2019-08-07 11:00:04
【问题描述】:

我想从 CSV 文件和数据库这两个数据源创建、更新和删除记录。

每个项目都加载到特定模型中:

List<Employee> fromEmployees = this.loadCSVEmployees();
List<Employee> toEmployees = this.loadDBEmployees();

我使用 except 和 Intersect 来比较值:

List<Employee> empToDelete = toEmployees.Except(fromEmployees, new EmpEqualityComparer()).ToList();
List<Employee> empToCreate = fromEmployees.Except(toEmployees, new EmpEqualityComparer()).ToList();
List<Employee> empToUpdate = fromEmployees.Intersect(toEmployees, new EmployeeIntersetComparer()).ToList();

empToUpdate 包含我要更新的值(来自 fromEmployees),但记录的 ID 设置在 toEmployees 列表中。

从相交结果的两个列表中合并一些值(如标识)的最佳方法是什么?员工模型有一个 SSNO,我用它来认识相同的用户……我不能使用联合。

【问题讨论】:

  • Intersect 将返回 2 个列表上的匹配记录,所以您不能直接将其切换到 toEmployees.Intersect(fromEmployees, &lt;...&gt;) 吗?
  • 因为 Intersect 仅匹配 SSNO 等一些属性并返回 CSV 结果...切换返回 SGBD 结果...
  • 这里有什么问题?标题是一个模糊的关键词列表,并不是一个真正的问题。合并对象经常被问到。例如merging two objects in C#。但我不确定这就是你想要做的......
  • 我不完全确定您要做什么,但 ZipJoin 可能非常有用
  • 谁说过反射?

标签: c#


【解决方案1】:

您可以使用.Zip 提供投影(如.Select)功能,但您需要分别过滤两个源列表而不是使用.Intersect,并确保两个列表在喂食前顺序相同他们进入.Zip

【讨论】:

    猜你喜欢
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2021-09-10
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多