Probablemente flags
es una lista de tipo de referencia, y distinta no funciona como se espera! Esto porque Distinct() no funciona en el valor del indicador en la lista, sino en sus referencias de memoria (que son todas diferentes).
Tienes que escribir una clase comparer que enseñe a Distinct cómo comparar la bandera igual. Suponga que tiene esta clase de la bandera:
public class flag
{
public string Name { get; set; }
public string Code { get; set; }
}
debe crear una clase comparador de esta manera:
class FlagComparer : IEqualityComparer<flag>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(flag x, flag y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
//Check whether the products' properties are equal.
return x.Code == y.Code && x.Name == y.Name;
}
}
y llame a su declaración:
List distinctFlags = flags.Distinct(new FlagComparer()).ToList();
De esta manera, el método distinto sabe exactamente cómo comparar la istance de la bandera de igualdad.
ACTUALIZACIÓN
Basado en su comentario, si Wanto seguir mi sugerencia, debe escribir la base comparador de la siguiente manera:
class FlagComparer : IEqualityComparer<flag>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(flag x, flag y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
//Check whether the products' properties are equal.
return x.HostID == y.HostID && x.RuleID == y.RuleID && x.Flag == y.Flag && x.FlagValue == y.FlagValue;
}
}
Por supuesto, cada propiedad debe ser un tipo de valor .
Echa un vistazo aquí para aclarar a sí mismo:
¿Cuáles son sus valores de entrada y lo qué se puede esperar como salida? –
¿Esto está dentro o fuera de un contexto de db? Muestra más código por favor. Y si puedes, da un ejemplo de los datos antes y después de la transformación. –
Agrupalos y elige un ganador. http://stackoverflow.com/questions/489258/linq-distinct-on-a-particular-property/491832#491832 –