1. ホーム
  2. linq

[解決済み] LINQ: 区分された値

2022-05-10 09:08:19

質問

XMLから以下の項目を設定しています。

id           category

5            1
5            3
5            4
5            3
5            3

これらの項目を明確にしたリストが必要です。

5            1
5            3
5            4

LINQでカテゴリーとIDを区別するにはどうすればよいですか?

どのように解決するのですか?

複数のフィールドで区別しようとしているのか?その場合は、無名型と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<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;
         }
     }
 }

(で渡す場合)。 null を比較器として指定すると、キータイプに応じたデフォルトの比較器が使用されます)。