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