4

LINQ で単語の最初の文字でグループ化する必要があります。私はLINQが初めてなので、LINQへのデバッグを認識していません。

//コード

var words4 = testDS.Tables["Words4"].AsEnumerable();

var wordGroups =
    from w in words4
    group w by w.Field<string>("word")[0] into g
    select new {FirstLetter = g.Key, Words = g };

foreach (var g in wordGroups)
{
    Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter);  
    Console.WriteLine(g.Field<string>("word"));

}

最後の Console.WriteLine で「無効な引数」の実行をスローします。

4

5 に答える 5

2

結果をより正確に得ることができるように、内部にループを追加してみてください。

交換:

Console.WriteLine(g.Field<string>("word"));

と:

foreach (var w in g.Words)
{
    Console.WriteLine(w.Field<string>("word"));
}
于 2013-03-15T06:43:35.807 に答える
1

これは、 Linq構文wordGroupsを使用して、内部から必要なものをフェッチする必要があります。

交換:

Console.WriteLine(g.Field<string>("word"));

と:

g.Words.ForEach(w => Console.WriteLine(W.Field<string>("word"));
于 2013-03-15T07:52:57.677 に答える
1

select、フィールドが として指定された匿名オブジェクトを作成しWords、後で を介してアクセスするためwordField拡張メソッドも必要ありません。

以下を置き換える必要があります。

Console.WriteLine(g.Field<string>("word"));

Console.WriteLine(g.Words);
于 2013-03-15T04:53:47.107 に答える
1

別のオプションは次のようなものでしょうか?

Dictionary<string, List<Product>> groupedDictionary = _db.Products.GroupBy(g => g.Name.Substring(0,1)).ToDictionary(g => g.Key, g => g.ToList());
于 2013-08-05T13:33:06.803 に答える
1

まず、DataRows で構成されるグループではなく、単語のみを表示したいので、必要な単語をデータ行から選択します。次に、単語がリストにあることを覚えておいてください。それらを印刷したい場合は、ループするか、string.Join のようなことをする必要があります (以下で行います)。例えば:

var wordGroups =
    from w in words4.Select(w => w.Field<string>("word"))
    group w by w[0] into g
    select new { FirstLetter = g.Key, Words = g };

foreach (var g in wordGroups) {
    Console.WriteLine("Words that start with the letter '{0}':", g.FirstLetter);
    Console.WriteLine(string.Join(", ", g.Words));
}
于 2013-03-15T06:27:46.120 に答える