[解決済み] 特定のプロパティに対するLINQのDistinct()
2022-03-19 03:24:54
質問
LINQについて勉強するために遊んでいるのですが、LINQを使用する方法がわかりません。
Distinct
単純なリストを持っていないとき(整数の単純なリストは非常に簡単ですが、これは問題ではありません)。私が使いたいもの
識別
のオブジェクトのリストに対して
一
または
もっと
のプロパティを変更することはできますか?
例 もし、あるオブジェクトが
Person
で、プロパティ
Id
. どのようにすれば、すべてのパーソンと
Distinct
というプロパティで、それらに
Id
を使用するのですか?
Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"
を取得するにはどうすればよいのでしょうか?
Person1
と
Person3
? それは可能ですか?
LINQで不可能な場合、何がベストかというと、リストが
Person
.NET 3.5でそのプロパティのいくつかに応じて?
解決方法は?
EDIT : これは現在、以下の一部です。 MoreLINQ .
必要なのは、"distinct-by" を効果的に使用することです。かなり簡単に書けますが、現状ではLINQの一部とは思えません。
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
つまり
Id
プロパティを使えばいい。
var query = people.DistinctBy(p => p.Id);
また、複数のプロパティを使用するには、適切に等式を実装した匿名型を使用します。
var query = people.DistinctBy(p => new { p.Id, p.Name });
未検証ですが、動作するはずです (少なくともコンパイルはできるようになりました)。
しかし、これはキーのデフォルトの比較器を想定しています。
HashSet
のコンストラクタを使用します。
関連
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み] LINQで「not in」クエリはどうやるの?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み] LINQを使用して、プロパティ値の最小または最大値を持つオブジェクトを選択する方法
-
[解決済み】IEnumerable vs List - What to Use? どのように動作するのでしょうか?
-
[解決済み】LINQでリスト内の項目を検索する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#で四捨五入する方法
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] LINQでクラスのプロパティで判別する【重複】について