在嵌套对象图中获取max volgnr

时间:2016-12-26 15:40:10

标签: c# linq

我有以下代码:

void Main()
{
    Order order = new Order
    { 
        Catalogen = new List<Catalog>
        {
            new Catalog
            {
                Artikels = new List<Artikel>
                {
                    new Artikel{PosNr=1}, new Artikel{PosNr=2}, new Artikel{PosNr=3}
                }
            },
            new Catalog
            {
                Artikels = new List<Artikel>
                {
                    new Artikel{PosNr=1}, new Artikel{PosNr=2}, new Artikel{PosNr=6}
                }
            }
        } 
    };

    int max=1;
    try
    {
        max = order.Catalogen
            .Where(c => c.Artikels.Count > 0)
            .Max(c => c.Artikels.Max(a => a.PosNr)) + 1;
    }
    catch(Exception Ex)
    {
        max = 1;
    }

Console.WriteLine (max);
}

class Artikel {
    public int PosNr;
};

class Catalog {
    public List<Artikel> Artikels;
};

class Order {
    public List<Catalog> Catalogen;
}

考虑到ordercatalog可以为空,是否有更简单的方法来获取max posnr?似乎需要考虑这个事实,但它使代码看起来很笨拙,所以我正在寻找更好的方法。

1 个答案:

答案 0 :(得分:1)

var q = from cataloog in order.Catalogen
        from artikel in cataloog.Artikels
        select artikel.Posnr;

var max = q.Max() + 1;

可选地

var max = order.Catalogen.SelectMany(c => c.Artikels).Max(a => a.Posnr) + 1;

更新

当然,如果没有Artikels,则最大Posnr未定义,由Enumerable.Max报告为InvalidOperationException

在您的具体情况下,有一个简单的解决方案:

var max = order.Catalogen.SelectMany(c => c.Artikels)
    .Select(a => a.Posnr)
    .DefaultIfEmpty()
    .Max() + 1;