C# 根据LINQ中单词的第一个字母按单词列表分组
我必须按LINQ中单词的第一个字母分组。因为我是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
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());