找到两个不同类型列表之间的增量

时间:2014-01-02 14:04:58

标签: c# .net

我正在尝试获取两个不同类型列表之间的增量,我有一个Comparer而没有遍历两个列表,不包括另一个列表中的项目。
该方法应该优选地是可重复使用的并且易于阅读。

我想过一些linq Except方法,但是两种类型和比较器都没有重载。

我所希望的(编写代码):

var fromDatabase = new List<T1>();
var fromUI = new List<T2>();

var comparer = new MyComparer();
var theThing = new TheThing<T1,T2>(fromDatabase, fromUI, comparer)

var newOnes = theThing.Two.Where(o=>o.other == null);
var removedOnes = theThing.One.Where(o=>o.other == null);

这将封装我的比较逻辑,我希望通过删除一些枚举来清理我的代码。

1 个答案:

答案 0 :(得分:1)

T1的列表映射到T2列表,反之亦然(您可以使用AutoMapper)。然后简单的Except就可以完成这项工作。

Mapper.CreateMap<T2, T1>(); // create map on application startup

var fromDatabase = new List<T1>();
var fromUI = new List<T2>();
var entitiesFromUI = Mapper.Map<List<T1>>(fromUI); // convert T2 list to T1 list
var newOnes = entitiesFromUI.Except(fromDatabase);
var removedOnces = fromDatabase.Except(entitiesFromUI);

注意:您应该为使用Except的类型实现Equals和GetHashCode,否则将通过引用比较实体,这将不会给出预期的结果,因为mapper在映射期间创建新实例。