Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Linq由多个列区分,并选择最新的行_Linq - Fatal编程技术网

Linq由多个列区分,并选择最新的行

Linq由多个列区分,并选择最新的行,linq,Linq,我有一个多行相似的数据。它们是比赛中的最新结果,例如,如果比赛中有3个进球,那就意味着3条线 我想把一场比赛分成一条线。但是不同的行必须是最新的(firstOrDefault?) 我确实想显示状态=确认和状态=打开,但显然我不想同时显示同一个游戏的“确认”和“打开” 所以我想按“Hometeam”和“outteam”两列进行分组。但对于同一场比赛,如果有3个进球,我会得到3条线,但我想要“最新的线” 有人能帮我吗?你可以试试这样的东西: data.GroupBy(d => new { H

我有一个多行相似的数据。它们是比赛中的最新结果,例如,如果比赛中有3个进球,那就意味着3条线

我想把一场比赛分成一条线。但是不同的行必须是最新的(firstOrDefault?)

我确实想显示状态=确认和状态=打开,但显然我不想同时显示同一个游戏的“确认”和“打开”

所以我想按“Hometeam”和“outteam”两列进行分组。但对于同一场比赛,如果有3个进球,我会得到3条线,但我想要“最新的线”


有人能帮我吗?

你可以试试这样的东西:

data.GroupBy(d => new { Hometeam = d.Hometeam, Outteam = d.Outteam })
    .Select(g => g.OrderBy(d => d.Status)
                  .ThenByDescending(d => d.GoalsHometeams + d.GoalsOutteams)
                  .First())
  • 按团队组合分组
  • 对于每个组,查找最新状态的条目(
    已确认
    按字母顺序排在
    打开
    之前)
  • 如果多个具有相同状态(即多个<代码>打开),则查找具有最高综合分数的条目
  • 获取每组的第一个结果(应该是最新的)
  • 演示:

    样本结果:

    Current game status results:
    Confirmed, Fylkir, Valur, 3, 1
    Confirmed, Selfoss, Grindavik, 3, 3
    Confirmed, Keflavik, IBV, 1, 0
    Confirmed, Stjarnan, IA, 1, 1
    Confirmed, Breioablik, Fram, 0, 2
    

    非常感谢您的回答,但是我只得到包含status=open的结果,请参见->??@agh:对于您的真实数据集,status所使用的语言似乎是“open”,实际上是按字母顺序排在“confirm”之前的。因此,为了使我的解决方案适应您的另一种语言,您需要使用
    g.OrderByDescending(d=>d.status)
    ,而不是按状态降序。然后它应该显示预期的结果。