比较列表之间差异的最佳方法

时间:2011-02-17 20:14:00

标签: vb.net linq entity-framework

我有以下两套清单:

清单1信息
ID = 1
PersonFirstName =莎拉
PersonLastName =史密斯
PersonFavoriteFood =披萨
PersonFavoriteColor =紫色 PersonFavoriteFlower = Lily

清单2信息
ID = 1
PersonFirstName =莎拉
PersonLastName =史密斯
PersonFavoriteFood =汉堡包 PersonFavoriteColor =黄色
PersonFavoriteFlower = Rose

正如你所看到的 - 莎拉史密斯进入了一个系统并改变了她最喜欢的食物,最喜欢的颜色和最喜欢的花。如果她的经理要进入这个应用程序并打开它,他会在Sarah Smith的记录中看到三行:

更改日期= 2/16
Field Changed = PersonFavoriteFood
原价=比萨饼 变化值=汉堡包 改变了=莎拉史密斯

更改日期= 2/16
Field Changed = PersonFavoriteColor
原始值=紫色
变化值=黄色
改变了=莎拉史密斯

更改日期= 2/16
Field Changed = PersonFavoriteFlower
原值=莉莉
变化值=玫瑰
改变了=莎拉史密斯

他看到的三行需要以这种方式保存在数据库中。这就是一个包含两行(原始行和已更改的行)的表,另一个包含有更多行的表,以及这些更改(食物,颜色,花)。我可以轻松地获得第一个包含原始行和更改行的表。我在这两个列表(原始和更改)上通过LINQ我的VB.NET代码很糟糕。我的想法是从每个列表中的每一列中选择值,确定它是否不同,如果是,则将其保存到其他表,如果不是,则从每个列表中获取下一列并进行比较。但是有更简单的方法吗?

我的链接代码是:

Dim columnvalue1 = from a in OriginalList select a.column1
Dim columnvalue2 = from b in ChangedList select a.column1

If columnvalue1 = columnvalue2 then
SaveDifferencesToTable(colomnvalue1, columnvalue2)
End If

如果有更好的方法,即使它在LINQ之外,请告诉我。我可以这样做,但我担心这是错误的做法。我也在使用实体框架。

1 个答案:

答案 0 :(得分:0)

您可以使用Enumerable.Except方法创建一组差异。如果必须,您还可以实现自己的比较器。无论如何,我相信你必须写一些代码。

以下是该方法的更多细节:

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx