J’ai la question suivante, la valeur d’un XML :
J’ai besoin d’une liste distincte de ces éléments :
Comment puis-je distinctes pour l’Id de catégorie et trop dans LINQ ?
J’ai la question suivante, la valeur d’un XML :
J’ai besoin d’une liste distincte de ces éléments :
Comment puis-je distinctes pour l’Id de catégorie et trop dans LINQ ?
Êtes-vous essayer d'être distinctes, en plus d'un champ? Si oui, il suffit d'utiliser un type anonyme et l'opérateur Distinct et il devrait être correct:
var query = doc.Elements("whatever")
.Select(element => new {
id = (int) element.Attribute("id"),
category = (int) element.Attribute("cat") })
.Distinct();
Si vous essayez d'obtenir un ensemble particulier de valeurs d'une "grande" de type, mais seulement à la recherche à un certain sous-ensemble de propriétés pour la distinction aspect, vous voulez probablement, DistinctBy
mises en œuvre dans la MoreLINQ en DistinctBy.cs
:
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IEqualityComparer<TKey> comparer)
{
HashSet<TKey> knownKeys = new HashSet<TKey>(comparer);
foreach (TSource element in source)
{
if (knownKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
(Si vous passez null
comme le comparer, il va utiliser le comparateur par défaut pour le type de clé.)
Je suis un peu en retard pour la réponse, mais vous pouvez faire cela si vous souhaitez que l’élément entier, non seulement les valeurs que vous voulez grouper par :
Cela vous donnera le premier élément entier correspondant à votre groupe de sélection, tout comme Jon Skeets second exemple à l’aide de DistinctBy, mais sans l’implémentation IEqualityComparer comparateur. DistinctBy sera très probablement plus rapide, mais la solution ci-dessus entraînera moins de code, si les performances ne sont pas un problème.
// First Get DataTable as dt
// DataRowComparer Compare columns numbers in each row & data in each row
IEnumerable<DataRow> Distinct = dt.AsEnumerable().Distinct(DataRowComparer.Default);
foreach (DataRow row in Distinct)
{
Console.WriteLine("{0,-15} {1,-15}",
row.Field<int>(0),
row.Field<string>(1));
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.