You'll need to write an equality comparer:
public sealed class DictionaryEqualityComparer<TKey, TValue> : IEqualityComparer<IDictionary<TKey, TValue>>
{
private readonly IEqualityComparer<TValue> _valueComparer;
public DictionaryEqualityComparer(IEqualityComparer<TValue> valueComparer = null)
{
_valueComparer = valueComparer ?? EqualityComparer<TValue>.Default;
}
public bool Equals(IDictionary<TKey, TValue> left, IDictionary<TKey, TValue> right)
{
if (left is null) return right is null;
if (right is null) return false;
if (left.Count != right.Count) return false;
foreach (KeyValuePair<TKey, TValue> pair in left)
{
if (!right.TryGetValue(pair.Key, out var value)) return false;
if (!_valueComparer.Equals(pair.Value, value)) return false;
}
return true;
}
public int GetHashCode(IDictionary<TKey, TValue> obj)
{
return obj?.Count ?? 0;
}
}
You would then need to use that class in your
Distinct
call:
var equalityComparer = new DictionaryEqualityComparer<long, string>();
var listComplete = listDictionary.Distinct(equalityComparer).ToList();