gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:16:35 26 4
gpt4 key购买 nike

我有两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com