考虑以下记录:
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
2 Nima 1990 11
3 Nima 2000 12
4 John 2001 1
5 John 2002 2
6 Sara 2010 4
字符串
我想根据F1
字段进行分组,并按Id
进行排序,然后从组的第一条记录中获取与以下记录类似的所有字段:
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
4 John 2001 1
6 Sara 2010 4
型
我如何使用linq做到这一点?
7条答案
按热度按时间vfh0ocws1#
字符串
ogq8wdun2#
字符串
q5iwbnjs3#
@Alireza的awnser是完全正确的,但是你必须注意到,在使用这段代码的时候
字符串
这与此代码类似,因为您对列表进行排序,然后进行分组,因此您将获得组的第一行
型
现在,如果你想做一些更复杂的事情,比如采取相同的分组结果,但采取F2的第一个元素和F3的最后一个元素,或者更自定义的东西,你可以通过研究下面的代码来做到这一点
型
所以你会得到这样的结果
型
n3h0vuf24#
用它来实现你想要的。然后决定要返回哪些属性。
字符串
1l5u6lss5#
另一种方式:
字符串
您可以按多个字段分组:
型
如果你需要保持秩序,那么使用lookup:
型
txu3uszq6#
字符串
在OrderBy()之后使用.AsEnumerable()
llycmphe7#
这并不是你要找的东西,但有时我们会找错东西,因为我们不知道存在什么。所以我的解决方案是最直观的:
字符串
先点单,然后分组-直接前进。现在,结果将是一个键类型对的列表。由于我们的表已经排序,我们可以只选择第一个条目。另外,我建议将结果放入一个字典中,ID作为访问器,这是一个非常快速的数据结构访问,仍然灵活。现在您可以使用
型
技术上它的IEnumerable<IBGrouping <int,yourType>>