LINQ функция рекурсии

Возьмем, к примеру, эту n-уровневую структуру:

public class SomeItem 
{
     public Guid ID { get;set; }
     public string Name { get; set; }
     public bool HasChildren { get;set; }
     public IEnumerable<SomeItem> Children { get; set; }
}

Если я хочу получить конкретный элемент по идентификатору (где-нибудь в структуре), есть ли какие-то преимущества LINQ, которые я могу использовать, чтобы легко его получить? в одном операторе или мне нужно использовать рекурсивную функцию, как показано ниже:

   private SomeItem GetSomeItem(IEnumerable<SomeItem> items, Guid ID)
    {
        foreach (var item in items)
        {
            if (item.ID == ID)
            {
                return item;
            }
            else if (item.HasChildren)
            {
                return GetSomeItem(item.Children, ID);
            }
        }
        return null;
    }
15
задан The_Butcher 27 January 2011 в 08:43
поделиться