我有一些看起来像这样的代码
public int getMobID()
{
int maxMobID = 0;
foreach (Farm f in subscription.Farms)
{
foreach (Paddock p in f.Paddocks)
{
foreach (AnimalMob m in p.Mobs)
{
if (m.AnimalMobID >= maxMobID)
{
maxMobID = m.AnimalMobID + 1;
}
}
}
}
return maxMobID;
}
我认为使用LINQ可能会更快,但我不确定它会是什么样子,确实如果可以的话。
对此有任何建议将不胜感激。
保
答案 0 :(得分:4)
我认为可能会更快
LINQ通常不会更快,但更多可读,因为它也使用循环。
var animalMobIDs = from farm in subscription.Farms
from paddock in farm.Paddocks
from mob in paddock.Mobs
select mob.AnimalMobID;
int maxMobID = 0;
if(animalMobIDs.Any())
maxMobID = animalMobIDs.Max() + 1;
顺便说一句,这是Enumerable.SelectMany
的查询版本,我发现它比方法语法更具可读性(同样适用于Enumerable.Join
imho)。
答案 1 :(得分:3)
我认为这个LINQ查询在性能和可读性方面都足够了:
subscription.Farms.SelectMany(f => f.Paddocks)
.SelectMany(p => p.Mobs)
.DefaultIfEmpty(-1)
.Max(m => m.AnimalMobID + 1);
答案 2 :(得分:2)
使用SelectMany将它们投影到一个列表中,然后并行化所有内容。类似的东西:
subscription.Farms.AsParallel().SelectMany(x =>
(x.Paddocks.SelectMany(
y => y.Mobs.Select(j => j.AnimalMobId))).Max();
请注意,如果您使用此并行版本,则只能获得性能。否则LINQ肯定会慢一些。