1

Linqに簡単なクエリがあり、単語の長さで文字グループを取得します。以下はコードです

string sentence = "This is sample linq query";
            string[] words =  sentence.Split(' ');

            var query = from word in words
                        group word by word.Length into gr
                        orderby gr.Key ascending
                        select new { Length = gr.Key, Words = gr };

            foreach (var obj in query)
            {
                Console.WriteLine("Word of Length: {0}", obj.Length);
                foreach (string word in obj.Words)
                {
                    Console.WriteLine("{0}", word);
                }
                Console.WriteLine();
            }

正しく動作します。上記のレコードをDataGridViewに配置して、これをWindowsフォームアプリケーションに変換したいので、以下のように実装しました。

string sentence = "This is sample linq query";
            string[] words = sentence.Split(' ');

            var query = from word in words
                        group word by word.Length into gr
                        orderby gr.Key ascending
                        select new { Length = gr.Key, Words = gr };


            dataGridView1.DataSource = query.ToList();

しかし、ここでは、Words列ではなく、DataGridViewの最初の列(長さ)を取得します。両方の列を取得するために他に必要なことはありますか。

4

1 に答える 1

0

あなたの場合、単語(グループ化の一部はIGroupingで構成されています)は、データグリッドでは表示できません。次のように単語を連結してみてください。

var query = from word in words
    group word by word.Length into gr
    orderby gr.Key ascending
    select new { Length = gr.Key, Words = gr.Aggregate((left, right)=>string.Format("{0}, {1}", left, right)) };

次に、グリッドに2つの列が表示されます。1つは長さで、もう1つはその長さの単語が再び連結されています。

于 2012-09-18T20:38:32.130 に答える