LINQ分组和排序不';I don’我没有按预期工作
我的预期产出是: 扩展名:.txt--CATS.txt--DOGS.txt扩展名:.pdf-- INFO.PDF--TEST2.PDF扩展名:.doc--SUMMARY.doc-- TEST1.DOC 下面是函数LINQ分组和排序不';I don’我没有按预期工作,linq,Linq,我的预期产出是: 扩展名:.txt--CATS.txt--DOGS.txt扩展名:.pdf-- INFO.PDF--TEST2.PDF扩展名:.doc--SUMMARY.doc-- TEST1.DOC 下面是函数 public void TestGroupByFluentSyntax() { string[] files = new string[] { "test1.doc", "test2.pdf", "cats.txt", "dogs.txt", "info
public void TestGroupByFluentSyntax()
{
string[] files = new string[] { "test1.doc", "test2.pdf", "cats.txt", "dogs.txt", "info.pdf", "summary.doc" };
IEnumerable<IGrouping<string, string>> query = files.GroupBy(file => System.IO.Path.GetExtension(file), file => file.ToUpper())
.OrderBy(grouping => grouping.Key);
foreach(IGrouping<string, string> grouping in query)
{
Console.WriteLine("Extension: " + grouping.Key);
foreach (string fileName in grouping)
Console.WriteLine(" -- " + fileName);
}
}
public void TestGroupByFluentSyntax2()
{
string[] files = new string[] { "test1.doc", "test2.pdf", "cats.txt", "dogs.txt", "info.pdf", "summary.doc" };
IEnumerable<IGrouping<string, string>> query = files.OrderBy(file => file).GroupBy(file => System.IO.Path.GetExtension(file), file => file.ToUpper());
foreach (IGrouping<string, string> grouping in query)
{
Console.WriteLine("Extension: " + grouping.Key);
foreach (string fileName in grouping)
Console.WriteLine(" -- " + fileName);
}
}
public void TestGroupByFluentSyntax()
{
string[]files=新字符串[]{“test1.doc”、“test2.pdf”、“cats.txt”、“dogs.txt”、“info.pdf”、“summary.doc”};
IEnumerable query=files.GroupBy(文件=>System.IO.Path.GetExtension(文件),文件=>file.ToUpper())
.OrderBy(grouping=>grouping.Key);
foreach(查询中的i分组)
{
Console.WriteLine(“扩展名:“+grouping.Key”);
foreach(分组中的字符串文件名)
Console.WriteLine(“--”+文件名);
}
}
public void TestGroupByFluentSyntax2()
{
string[]files=新字符串[]{“test1.doc”、“test2.pdf”、“cats.txt”、“dogs.txt”、“info.pdf”、“summary.doc”};
IEnumerable query=files.OrderBy(file=>file.GroupBy(file=>System.IO.Path.GetExtension(file),file=>file.ToUpper());
foreach(查询中的i分组)
{
Console.WriteLine(“扩展名:“+grouping.Key”);
foreach(分组中的字符串文件名)
Console.WriteLine(“--”+文件名);
}
}
如果我先下单,然后分组,它就可以工作了。但分组和排序并不是这样。我在函数“TestGroupByFluentSyntax()”中缺少了什么?我在该函数中分组,然后排序?您并不遥远。在
TestGroupByFluentSyntax()
中,您的输出是:
Extension: .doc
-- TEST1.DOC
-- SUMMARY.DOC
Extension: .pdf
-- TEST2.PDF
-- INFO.PDF
Extension: .txt
-- CATS.TXT
-- DOGS.TXT
您可以按扩展名分组,并在扩展名上排序。因此,当您显示时,扩展名来自doc、pdf和txt。但每组中的文件未排序。您可以实现所需的输出(通过颠倒扩展顺序-使用OrderByDescending
如下所示:
IEnumerable<IGrouping<string, string>> query
= files.GroupBy(file => System.IO.Path.GetExtension(file), file => file.ToUpper())
.OrderByDescending(grouping => grouping.Key);
以下是输出:
Extension: .txt
-- CATS.TXT
-- DOGS.TXT
Extension: .pdf
-- INFO.PDF
-- TEST2.PDF
Extension: .doc
-- SUMMARY.DOC
-- TEST1.DOC
这起作用了:
public void TestGroupByFluentSyntax()
{
WriteLine(“TestGroupByFluentSyntax”);
string[]files=新字符串[]{“test1.doc”、“test2.pdf”、“cats.txt”、“dogs.txt”、“info.pdf”、“summary.doc”};
IEnumerable query=files.GroupBy(file=>System.IO.Path.GetExtension(file),file=>file.ToUpper());
foreach(查询中的i分组)
{
Console.WriteLine(“扩展名:“+grouping.Key”);
foreach(grouping.OrderBy(name=>name)中的字符串文件名)
Console.WriteLine(“--”+文件名);
}
}
好的,我想我意识到了我的错误。OrderBy只是按键对组进行排序,而不是按组的成员进行排序。我想我真正的问题是,如果我通过GroupBy进行平面到层次(字符串到iGroup)的转换,你能保持层次结构(iGroup)吗,以有效的方式对单个组进行排序?我发现GroupBy会按键以升序对组进行隐式排序。添加第一个OrderBy是多余的。您不应该依赖于按GroupBy
排序,除非您的源排序已经是您想要的。
Extension: .txt
-- CATS.TXT
-- DOGS.TXT
Extension: .pdf
-- INFO.PDF
-- TEST2.PDF
Extension: .doc
-- SUMMARY.DOC
-- TEST1.DOC
This worked:
public void TestGroupByFluentSyntax()
{
Console.WriteLine("TestGroupByFluentSyntax");
string[] files = new string[] { "test1.doc", "test2.pdf", "cats.txt", "dogs.txt", "info.pdf", "summary.doc" };
IEnumerable<IGrouping<string, string>> query = files.GroupBy(file => System.IO.Path.GetExtension(file), file => file.ToUpper());
foreach (IGrouping<string, string> grouping in query)
{
Console.WriteLine("Extension: " + grouping.Key);
foreach (string fileName in grouping.OrderBy(name => name))
Console.WriteLine(" -- " + fileName);
}
}