[英]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.