Вы пытаетесь отличаться более чем одним полем? Если это так, просто используйте анонимный тип и оператор Distinct, и все должно быть в порядке:
var query = doc.Elements("whatever")
.Select(element => new {
id = (int) element.Attribute("id"),
category = (int) element.Attribute("cat") })
.Distinct();
Если вы пытаетесь получить отличный набор значений «большего» типа, но только смотрите в некоторых подмножествах свойств для аспекта отличимости вы, вероятно, захотите DistinctBy
, как реализовано в MoreLINQ в DistinctBy.cs
:
public static IEnumerable DistinctBy(
this IEnumerable source,
Func keySelector,
IEqualityComparer comparer)
{
HashSet knownKeys = new HashSet(comparer);
foreach (TSource element in source)
{
if (knownKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
( Если вы перейдете в null
в качестве компаратора, он будет использовать сопоставитель по умолчанию для типа ключа.)