Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据LINQ中单词的第一个字母按单词列表分组_C#_.net_Linq - Fatal编程技术网

C# 根据LINQ中单词的第一个字母按单词列表分组

C# 根据LINQ中单词的第一个字母按单词列表分组,c#,.net,linq,C#,.net,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 }; for

我必须按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"));

}
var words4=testDS.Tables[“words4”].AsEnumerable();
变量字组=
从words4中的w开始
按w字段(“字”)[0]将w分组为g
选择新的{FirstLetter=g.Key,Words=g};
foreach(字组中的变量g)
{
WriteLine(“以字母“{0}”开头的单词:”,g.FirstLetter);
控制台写入线(例如字段(“word”);
}

它在最后一个控制台中抛出“Invalid Arguments”执行选项。WriteLine。

因为在
select
中,您创建了一个匿名对象,其字段指定为
Words
,之后您通过
word
访问它,而且
字段
扩展方法也不是必需的

您需要替换:

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

首先,不是由数据行组成的组,因为您只想显示单词,所以我会从数据行中选择您想要的单词。其次,记住单词在列表中。如果您想打印出来,您需要循环或执行类似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));
}
var字组=
从words4中的w中选择(w=>w.Field(“word”))
将w按w[0]分组为g
选择新的{FirstLetter=g.Key,Words=g};
foreach(字组中的变量g){
WriteLine(“以字母“{0}”开头的单词:”,g.FirstLetter);
Console.WriteLine(string.Join(“,”,g.Words));
}

尝试在内部添加一个循环,以便更准确地获得结果

替换:

Console.WriteLine(g.Field<string>("word"));
Console.WriteLine(g.Field<string>("word"));
Console.WriteLine(例如字段(“word”);
与:

foreach(以g.Words表示的变量w)
{
控制台写入线(w.Field(“word”);
}

这应该使用Linq语法从
字组中获取您想要的内容:

替换:

Console.WriteLine(g.Field<string>("word"));
Console.WriteLine(g.Field<string>("word"));
Console.WriteLine(例如字段(“word”);
与:

g.Words.ForEach(w=>Console.WriteLine(w.Field(“word”));

另一个选项是这样的

Dictionary<string, List<Product>> groupedDictionary = _db.Products.GroupBy(g => g.Name.Substring(0,1)).ToDictionary(g => g.Key, g => g.ToList());
Dictionary-groupedDictionary=\u db.Products.GroupBy(g=>g.Name.Substring(0,1)).ToDictionary(g=>g.Key,g=>g.ToList());

如果他想要某种可读的输出,他可能想要:
Console.WriteLine(string.Join(“,”,g.Words.Select(w=>w.Field(“word”));
@aquinas,是的,这是真的,在我看来,这也应该是一个记录的答案(因为这里的主题是Linq)我相信你也可以用Linq做同样的事情如下:
g.Words.ForEach(w=>Console.WriteLine(w.Field(“word”);
@Kjartan你的评论就是答案,而不是Santhosh的答案。@eriawan:但是Santhosh的代码对我有效,而且他在我点击他的正确时间回答了我。
Dictionary<string, List<Product>> groupedDictionary = _db.Products.GroupBy(g => g.Name.Substring(0,1)).ToDictionary(g => g.Key, g => g.ToList());