嗨我有一份体育比赛清单,我希望按比赛进行分组,然后按开始时间排序,而不影响c#比赛的分组(比赛分组,然后排序开始日期):
基本上我需要的是这个:
Match Start Time Competition
red vs blue 17:40 league 1
yellow vs green 15:00 league 2
brown vs orange 12:00 league 1
purple vs maroon 20:00 league 3
gold vs silver 16:45 league 1
white vs black 19:00 league 3
grey vs navy 18:00 league 1
转换成这个:
Match Start Time Competition
brown vs orange 12:00 league 1
gold vs silver 16:45 league 1
red vs blue 17:40 league 1
grey vs navy 18:00 league 1
yellow vs green 15:00 league 2
white vs black 19:00 league 3
purple vs maroon 20:00 league 3
我目前的代码不起作用,我不知道下一步该去哪里。任何想法将不胜感激。以下是代码:
var matchListSorted =
list1.GroupBy(rows=> rows.Competition)
.SelectMany(row=> row.OrderBy(rows=> rows.ExpectedOffDate))
.ToList();
编辑此代码目前按比赛分组,但后来忽略它,支持按开始时间排序,如下所示
Match Start Time Competition
brown vs orange 12:00 league 1
yellow vs green 15:00 league 2
gold vs silver 16:45 league 1
red vs blue 17:40 league 1
grey vs navy 18:00 league 1
white vs black 19:00 league 3
purple vs maroon 20:00 league 3
答案 0 :(得分:1)
不确定我的答案是否会被视为非主题,但我能够通过仅按顺序进行分组来实现结果。
[TestClass]
public class LinqTests {
[TestMethod]
public void Linq_Sort() {
var input = new[]
{
new {Match="red vs blue",StartTime="17:40",Competition="league 1"},
new {Match="yellow vs green",StartTime="15:00",Competition="league 2"},
new {Match="brown vs orange",StartTime="12:00",Competition="league 1"},
new {Match="purple vs maroon",StartTime="20:00",Competition="league 3"},
new {Match="gold vs silver",StartTime="16:45",Competition="league 1"},
new {Match="white vs black",StartTime="19:00",Competition="league 3"},
new {Match="grey vs navy",StartTime="18:00",Competition="league 1"},
};
var matchListSorted = (from match in input
orderby match.Competition, match.StartTime
select match);
var result = matchListSorted.ToList();
}
}
得到以下结果
+ [0] { Match = "brown vs orange", StartTime = "12:00", Competition = "league 1" } <Anonymous Type>
+ [1] { Match = "gold vs silver", StartTime = "16:45", Competition = "league 1" } <Anonymous Type>
+ [2] { Match = "red vs blue", StartTime = "17:40", Competition = "league 1" } <Anonymous Type>
+ [3] { Match = "grey vs navy", StartTime = "18:00", Competition = "league 1" } <Anonymous Type>
+ [4] { Match = "yellow vs green", StartTime = "15:00", Competition = "league 2" } <Anonymous Type>
+ [5] { Match = "white vs black", StartTime = "19:00", Competition = "league 3" } <Anonymous Type>
+ [6] { Match = "purple vs maroon", StartTime = "20:00", Competition = "league 3" } <Anonymous Type>
然后以这种方式尝试并获得相同的结果
[TestMethod]
public void Linq_GroupSort() {
var input = new[]
{
new {Match="red vs blue",StartTime="17:40",Competition="league 1"},
new {Match="yellow vs green",StartTime="15:00",Competition="league 2"},
new {Match="brown vs orange",StartTime="12:00",Competition="league 1"},
new {Match="purple vs maroon",StartTime="20:00",Competition="league 3"},
new {Match="gold vs silver",StartTime="16:45",Competition="league 1"},
new {Match="white vs black",StartTime="19:00",Competition="league 3"},
new {Match="grey vs navy",StartTime="18:00",Competition="league 1"},
};
var matchListSorted = (from match in input
orderby match.Competition
group match by match.Competition into g
select g).SelectMany(g => g.OrderBy(m => m.StartTime));
var result = matchListSorted.ToList();
}
答案 1 :(得分:0)
我工作的原始代码
var matchListSorted =
list1.GroupBy(rows=> rows.Competition)
.SelectMany(row=> row.OrderBy(rows=> rows.ExpectedOffDate))
.ToList();
我不知道为什么它在前几次不起作用。几个小时后,我尝试使用相同的代码添加测试数据(包括原始数据)并且它有效。