如何获得列表中的最大ID然后返回列表 [英] How to get maximum Id in List and then return list

查看:158
本文介绍了如何获得列表中的最大ID然后返回列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的结构:

 无ID名称状态
1 1 A 1
2 1 B 1
3 1 c 1
4 1 D 1
5 2 E 3
6 2 F 3
7 2 G 3

当我得到一个列表时,我想运行一个linq结果获取最大的行数,以及每个状态和行的详细信息。像:

 无ID名称状态
4 1 D 1
7 2 G 3

code>

意味着最新的状态。



有没有办法,因为我尝试了所有Max,Orderby递减,但是我得到了单一结果,但是我需要一个List作为结果。

必须提取相同id(GroupBy)的组,然后使用SelectMany将每个组的最大编号导出:

  public void Exec()
{
var items = new List< Item> {
new Item {No = 1,Id = 1,Name =A,状态= 1},
新项目{No = 2,Id = 1,Name =B,Status = 1},
New Item {No = 3,Id = 1,Name =C ,状态= 1},
新项目{No = 4,Id = 1,Name =D,Status = 1},
New Item {No = 5,Id = 2,Name = E,状态= 1},
新物品{No = 6,Id = 2,Name =F,Status = 1},
新物品{No = 7,Id = Name =G,Status = 1},

};

var result = items
.GroupBy(groupedItems => groupedItems.Id)
.SelectMany(i =>项目
.Where(innerItem => innerItem.Id == i.Key&& amp; innerItem.No == i.Max(ii => ii.No))
.Select(innerItem => innerItem)
);

foreach(结果中的变量)
Console.WriteLine(ID {0}的最大项目:否= {1},名称= {2},状态= {3} ,item.Id,item.No,item.Name,item.Status);


}

私人课程项目
{
public Int32否{get;组; }
public Int32 Id {get;组; }
public String Name {get;组; }
public Int32 Status {get;组;输出:






$ b pre> Id 1的最大项目:No = 4,Name = D,Status = 1
Id 2的最大项目:No = 7,Name = G,Status = 1






另类:

  items.GroupBy(groupedItems => groupedItems.Id)
.Select(g => g.OrderByDescending(x => x.No) .First())


I have a structure like this:

No  ID  Name Status
1    1    A    1
2    1    B    1
3    1    c    1
4    1    D    1
5    2    E    3
6    2    F    3
7    2    G    3

I want to run a linq when I get a list results get maximum row where for each status and row details as well.Like:

No  ID  Name Status
4    1    D    1
7    2    G    3

Means latest entry for the status.

Is there a way around, as I have tried all Max, Orderby descending but I get single result but I need a List as a result.

解决方案

You have to extract the groups of a same id (GroupBy), and then export the max No for each group, with a SelectMany :

public void Exec()
{
    var items = new List<Item>{ 
        new Item{ No = 1, Id = 1, Name = "A", Status = 1} ,
        new Item{ No = 2, Id = 1, Name = "B", Status = 1} ,
        new Item{ No = 3, Id = 1, Name = "C", Status = 1} ,
        new Item{ No = 4, Id = 1, Name = "D", Status = 1} ,
        new Item{ No = 5, Id = 2, Name = "E", Status = 1} ,
        new Item{ No = 6, Id = 2, Name = "F", Status = 1} ,
        new Item{ No = 7, Id = 2, Name = "G", Status = 1} ,

    };

    var result = items
                    .GroupBy(groupedItems => groupedItems.Id)
                    .SelectMany(i => items
                                         .Where(innerItem => innerItem.Id == i.Key && innerItem.No == i.Max(ii => ii.No))
                                         .Select(innerItem => innerItem)                                             
                                         );

    foreach (var item in result)
        Console.WriteLine("Max item of Id {0} : No = {1}, Name = {2}, Status = {3}", item.Id, item.No, item.Name, item.Status);


}

private class Item
{
    public Int32 No { get; set; }
    public Int32 Id { get; set; }
    public String Name { get; set; }
    public Int32 Status { get; set; }
}

output :

Max item of Id 1 : No = 4, Name = D, Status = 1
Max item of Id 2 : No = 7, Name = G, Status = 1


Alternative:

items.GroupBy(groupedItems => groupedItems.Id)
     .Select(g => g.OrderByDescending(x => x.No).First())

这篇关于如何获得列表中的最大ID然后返回列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆