Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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中的2个不同序列分组?_C#_Linq - Fatal编程技术网

C# 如何将LINQ中的2个不同序列分组?

C# 如何将LINQ中的2个不同序列分组?,c#,linq,C#,Linq,如何通过下一个键将两个不同的第一类年份==IEnumerable和第二类occurs=IEnumerable序列分组为1个序列:如果occurs中的数字相同,则按年份排序,否则仅使用LINQ进行排序 我通过以下方式获得了这些序列: var years = some_strings.Select(x => x.Split(' ')[1]); var occurs = years.Select(x => years.Count(e => e == x)); 所以变量years只

如何通过下一个键将两个不同的第一类年份==IEnumerable和第二类occurs=IEnumerable序列分组为1个序列:如果occurs中的数字相同,则按年份排序,否则仅使用LINQ进行排序

我通过以下方式获得了这些序列:

var years  = some_strings.Select(x => x.Split(' ')[1]);
var occurs = years.Select(x => years.Count(e => e == x));
所以变量years只包含带有years的字符串,而occurrent包含第一个序列中相同年份的计数

我无法理解LINQ中的这些技术

我会这样做吗

occurs.GroupBy(x => x ???
我应该在哪里使用第二个序列? 也许我可以在一个查询中得到这些序列,然后处理它

UPD

我使用匿名类修改了1中的2个查询:

    some_strings.Select(x => x.Split(' ')[1]).
    GroupBy(x => x).
    Select(x => new {num = x.Key, count = x.Count() })
因此,有几年的时间,并且两者都发生

我正在尝试获取下一个字符串:

1 1990
1 1991
1 1992
2 1967
2 1968
5 2010
...

现在,有了带有所需值的查询,我如何才能像前面的子句那样对其排序?

您已经非常接近了。这将为您提供与最新更新类似的字符串列表:

var occurences
    = years.GroupBy(x => x)
           .Select(x => new { Year = int.Parse(x.Key), Count = x.Count() })
           .OrderBy(x => x.Count)
           .ThenBy(x => x.Year)
           .Select(x => string.Concat(x.Count, " ", x.Year))
           .ToList();
使用您创建的匿名类型,您可以:

点菜 然后每年 最后使用string.Concat创建一个字符串列表
请注意,如果年份中的任何字符串实际上不是数字,int.Parse将抛出异常。这将为您提供与最新更新类似的字符串列表:

var occurences
    = years.GroupBy(x => x)
           .Select(x => new { Year = int.Parse(x.Key), Count = x.Count() })
           .OrderBy(x => x.Count)
           .ThenBy(x => x.Year)
           .Select(x => string.Concat(x.Count, " ", x.Year))
           .ToList();
使用您创建的匿名类型,您可以:

点菜 然后每年 最后使用string.Concat创建一个字符串列表
请注意,如果年份中的任何字符串不是真正的数字,int.Parse将引发异常

不确定您想要实现什么,因为没有代码,但所提到的语句可以组合为“var foo=some_strings.Split”[1]。根据需要执行强制转换的返回类型选择x=>x,您也可以使用.Cast来强制转换最终输出。因此,您的编辑中的查询可以满足您的要求吗?在这种情况下,您应该将其作为答案发布,而不是作为问题的编辑。如果没有,您需要解释您的问题。@Servy我更新了我的问题,希望现在能更清楚一点。我不太确定您想要实现什么,因为没有代码,但是提到的语句可以像“var foo=some_strings.Split”[1]那样组合在一起.Selectx=>x……’根据您需要执行强制转换的返回类型,您还可以使用.Cast来强制转换最终输出。因此,编辑中的查询符合您的要求吗?在这种情况下,您应该将其作为答案发布,而不是作为问题的编辑。如果没有,你需要解释你有什么问题。@Servy我更新了我的问题,我希望现在能更清楚一点,太好了!工作完美。这正是我需要的:太好了!工作完美。这正是我需要的: