Files
egtbeamwall/EgtBEAMWALL.DataLayer/Utils.cs
T
2021-05-04 08:55:50 +02:00

47 lines
1.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EgtBEAMWALL.DataLayer
{
public static partial class LinqExtensions
{
#region Public Methods
public static IEnumerable<T> ExceptUsingJSonCompare<T>
(this IEnumerable<T> first, IEnumerable<T> second)
{
return first.Except(second, new JSonEqualityComparer<T>());
}
#endregion Public Methods
}
/// <summary>
/// Comparer generico basato su Json
/// https://stackoverflow.com/questions/7042090/linq-except-with-custom-iequalitycomparer/7098076#7098076
/// </summary>
/// <typeparam name="T"></typeparam>
public class JSonEqualityComparer<T> : IEqualityComparer<T>
{
#region Public Methods
public bool Equals(T x, T y)
{
return String.Equals
(
Newtonsoft.Json.JsonConvert.SerializeObject(x),
Newtonsoft.Json.JsonConvert.SerializeObject(y)
);
}
public int GetHashCode(T obj)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(obj).GetHashCode();
}
#endregion Public Methods
}
}