c# - 我如何比较两个 C# 集合并发出添加、删除命令以使它们相等?

标签 c#

我有两个 ICollection 集合:

public partial class ObjectiveDetail
{
    public int ObjectiveDetailId { get; set; }
    public int Number { get; set; }
    public string Text { get; set; }
}

var _objDetail1: // contains a list of ObjectiveDetails from my database.
var _objDetail2: // contains a list of ObjectiveDetails from web front end. 

我如何遍历这些并发布和添加、删除或更新以使数据库与 Web 前端的最新同步?

如果第一个列表中有记录但第二个列表中没有,那么我想:

_uow.ObjectiveDetails.Delete(_objectiveDetail);

如果第二个列表中有记录,但第一个列表中没有,那么我想:

_uow.ObjectiveDetails.Add(_objectiveDetail);

如果第一个和第二个中有一条记录(相同的 ObjectiveDetailId),那么我需要查看它们是否相同,如果不相同,则发出:

_uow.ObjectiveDetails.Update(_objectiveDetail);

我想用某种方式来做到这一点:

foreach (var _objectiveDetail in _objectiveDetails) {} 

但后来我想我可能需要其中两个,我也想知道是否有更好的方法。有没有人对我如何做到这一点有任何建议?

最佳答案

下面的代码是一些可能的解决方案之一

var toBeUpdated =
            objectiveDetail1.Where(
            a => objectiveDetail2.Any(
                b => (b.ObjectiveDetailId == a.ObjectiveDetailId) && 
                     (b.Number != a.Number || !b.Text.Equals(a.Text))));

var toBeAdded =
            objectiveDetail1.Where(a => objectiveDetail2.All(
            b => b.ObjectiveDetailId != a.ObjectiveDetailId));

var toBeDeleted =
            objectiveDetail2.Where(a => objectiveDetail1.All(
            b => b.ObjectiveDetailId != a.ObjectiveDetailId));

剩下的就是一段简单的代码,将三个集合添加、删除、更新到数据库。

关于c# - 我如何比较两个 C# 集合并发出添加、删除命令以使它们相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18160113/

相关文章:

c# - 如何在 c# windows phone 8.1 应用程序中写入 excel 文件?

c# - 如何在 C# 程序的面板中运行另一个应用程序?

c# - 在 ServiceStack AutoQuery 中多次加入同一个表

c# - 在 WPF 中将形状转换为可重用的几何图形

c# - 哪个 WPF 控件可以将网格作为子控件

c# - SQL Server 更新/触发时无效的 redis 缓存

c# - 在 C# 中格式化 DateTime 以附加到文件名

c# - 当使用 EasyNetQ 发布消息并且总线断开连接时会发生什么?

c# - 从 Fairbanks SCB-9000 USB 秤读取重量

c# - 在映射时向 Automapper 提供构造函数参数