[解決済み] LINQ Distinct() を複数フィールドで使用する方法
質問
私は以下のような EFクラス データベースから派生したクラス(簡略化)
class Product
{
public string ProductId;
public string ProductName;
public string CategoryId;
public string CategoryName;
}
ProductId
は
主キー
であり、テーブルの
DB設計者が行った間違った設計判断のため(私は修正できません)、私は
CategoryId
と
CategoryName
をこのテーブルの中に入れてください。
を必要とします。
DropDownList
で、(明確な)
CategoryId
として
値
そして
CategoryName
として
テキスト
. そこで、以下のようなコードを適用してみました。
product.Select(m => new {m.CategoryId, m.CategoryName}).Distinct();
で無名オブジェクトを作成する必要がありますが、論理的には
CategoryId
と
CategoryName
をプロパティとして指定します。また
Distinct()
は、重複するペアがないことを保証します (
CategoryId
,
CategoryName
).
しかし、実際にはうまくいきません。私が理解した限りでは
Distinct()
が動作するのは、コレクションにフィールドが1つだけある場合だけで、それ以外は無視されるだけだと理解しています。何か回避策はありますか?ありがとうございます。
アップデイト
申し訳ございません。
product
は
List<Product> product = new List<Product>();
と同じ結果を得るための別の方法を見つけました。
Distinct()
:
product.GroupBy(d => new {d.CategoryId, d.CategoryName})
.Select(m => new {m.Key.CategoryId, m.Key.CategoryName})
どのように解決するのですか?
私はあなたがリスト上のメソッド呼び出しのように明確なを使用していると仮定します。クエリの結果を DropDownList のデータソースとして使用する必要があります。
ToList
.
var distinctCategories = product
.Select(m => new {m.CategoryId, m.CategoryName})
.Distinct()
.ToList();
DropDownList1.DataSource = distinctCategories;
DropDownList1.DataTextField = "CategoryName";
DropDownList1.DataValueField = "CategoryId";
いくつかのプロパティしか持たない匿名型ではなく、実際のオブジェクトが必要な場合の別の方法として
GroupBy
を無名型と一緒に使うことです。
List<Product> distinctProductList = product
.GroupBy(m => new {m.CategoryId, m.CategoryName})
.Select(group => group.First()) // instead of First you can also apply your logic here what you want to take, for example an OrderBy
.ToList();
第三の方法として
MoreLinq の
DistinctBy
.
関連
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み] Distinct() with lambda?
-
[解決済み] LINQ を使用して、ある List<> にある項目を別の List<> にない項目として取得する。
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】ソケットのアドレス(プロトコル/ネットワークアドレス/ポート)は、通常1つしか使用できない?
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] LINQ Select Distinct with Anonymous Types
-
[解決済み] IEqualityComparerでデリゲートをラップする