2

通常のループメソッドを使用せずに、Linqクエリの結果をstring[]またはListに変換する方法を探しています。「例は問題ありませんが、実際に何をしようとしているのですか?」私は例が示すことをやろうとしています。オブジェクトのコレクションがあり、オブジェクトのリストに含まれている文字列配列または一意のIDのリストが必要です。

コード例がすべてを物語っていると思います。それはあなたが実行できる完全なプログラムです。

using System.Collections.Generic;
using System.Linq;

class Program
{
    class DataModel
    {
        public DataModel(string id) { ID = id; }
        public string ID;
    }

    static void Main(string[] args)
    {
        var dummyData = new DataModel[]
        {
            new DataModel("1"),
            new DataModel("1"),
            new DataModel("2"),
            new DataModel("3"),
            new DataModel("3")
        };

        //  This works fine
        var uniqueIDs = 
            from model in dummyData
            group model by model.ID into grouped
            select grouped.Key;

        //  This is the part that bugs me, it's so inelegant...
        List<string> idStringList = new List<string>();
        foreach (var id in uniqueIDs)
            idStringList.Add(id);
    }
}
4

6 に答える 6

3

あなたはただ探していますToList()

idStringList = uniqueIDs.ToList();

リストだけが必要な場合は、これをクエリに直接追加することもできます。

var idStringList = (from model in dummyData
                    group model by model.ID into grouped
                    select grouped.Key).ToList();
于 2012-04-19T03:23:18.213 に答える
3
var list = whatever.ToList();

通常のループ方法は何ですか?

于 2012-04-19T03:23:20.710 に答える
2

すべての操作を1行で実行できます。

List<string> uniqueIDs = dummyData.Select(model => model.ID).Distinct().ToList();

このToArray()方法も同様に機能しますが、配列を提供します。

于 2012-04-19T03:30:36.290 に答える
2

uniqueIDs.ToList();これはIEnumerableの拡張メソッドです。これがMSDNです

于 2012-04-19T03:23:10.867 に答える
1

IEnumerableには、次のようにこれを実現するために使用できる多数の拡張メソッドがあります。

whateverList.ToList()
whateverList.ToArray()
于 2012-04-19T03:25:39.517 に答える
0

本当に配列string[]が必要な場合は、次のことができます。

string[] myArray = (from model in dummyData
                group model by model.ID into grouped
                select grouped.Key.ToString()).ToArray();
于 2012-04-19T03:27:49.240 に答える