[英]Comparing LINQ entities and getting difference
我正在使用闪存驱动器为我的数据库编写同步系统。 因此,闪存上存在一个XML文件,其内容由实体的GUID
。
我正在使用标准的XmlSerialize
和DataLoadOptions
进行序列化基础和相关实体。
因此,我需要实现比较器来从闪存驱动器中获取数据库数据和反序列化数据之间的差异。
我尝试使用Linq Except<>
方法,但是它说相同的实体是不同的。
是否存在另一种比较实体并获取包含不同数据的对象的方法?
您可以为此创建自己的方法。 假设您有:
interface IEntity
{
int Id { get; set; }
}
实现它的具体类:
class Entity : IEntity
{
public int Id { get; set; }
}
您可以创建这样的方法:
static ICollection<T> Compare<T>(ICollection<T> list1, ICollection<T> list2) where T : IEntity
{
List<T> result = new List<T>();
foreach (T item in list1) if(!list2.Any(e => e.Id == item.Id)) result.Add(item);
foreach (T item in list2) if (!list1.Any(e => e.Id == item.Id)) result.Add(item);
return result;
}
用法:
List<IEntity> list1 = new List<IEntity>() { new Entity() { Id = 1 }, new Entity() { Id = 10 } };
List<IEntity> list2 = new List<IEntity>() { new Entity() { Id = 1 }, new Entity() { Id = 5 } };
List<IEntity> result = Compare(list1, list2).ToList();
foreach (IEntity item in result)
{
Console.WriteLine(item.Id);
}
输出:5,10
PS在性能方面应该没问题,但是如果您仍然想使用LINQ,请尝试实现IEqualityComparer接口,并将其实例传递给.Except()方法,这是第二次重载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.