我有以下代码:
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?似乎需要考虑这个事实,但它使代码看起来很笨拙,所以我正在寻找更好的方法。
答案 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;