1. ホーム
  2. c#

[解決済み] Linqでリストから複数のフィールドを選択する

2022-04-28 04:40:03

質問

ASP.NET C#で、構造体を持っています。

public struct Data
{
    public int item1;
    public int item2;
    public int category_id;
    public string category_name;
}

で、それらのListがあります。 を選択したい。 category_idcategory_name を実行すると DISTINCT で、最後に ORDERBYcategory_name .

今あるのはこんな感じです。

List<Data> listObject = getData();
string[] catNames = listObject
                    .Select(i=> i.category_name)
                    .Distinct()
                    .OrderByDescending(s => s)
                    .ToArray();

これは明らかにカテゴリ名を取得するだけです。 質問は、複数のフィールドを取得する方法と、これをどのようなデータ構造で保存するかということです(not a string[] )?

エディション

構造体のリストを使うことは、決まっていない。 もし、selectをより簡単にするために、私のバックデータ構造を変更することが望ましいのであれば(私はこれをたくさん書くつもりです)、私は喜んで提案を受けるでしょう。

解決方法は?

匿名型は、コードの後半で強く型付けされたデータ構造に任意のフィールドを選択することを可能にします。

var cats = listObject
    .Select(i => new { i.category_id, i.category_name })
    .Distinct()
    .OrderByDescending(i => i.category_name)
    .ToArray();

後で使うために保存する必要がある(らしい)ので、GroupBy 演算子を使うことができます。

Data[] cats = listObject
    .GroupBy(i => new { i.category_id, i.category_name })
    .OrderByDescending(g => g.Key.category_name)
    .Select(g => g.First())
    .ToArray();