Recursive statement with linq I have a recursive statement that removesactivities that don't have a resource type for a certain OrganizationID. I was wondering if there was a better way to do this where I can eliminate some of the for loops and use a little more linq

    private IEnumerable&lt;SubProjectDto&gt; GetProjectAndActivitiesForByOrg(IEnumerable&lt;SubProjectDto&gt; children, Guid? organiazaitonId)
    {
        var subProjects = new List&lt;SubProjectDto&gt;();
        subProjects.AddRange(children);
        for (var i = 0; i &lt; subProjects.Count; i++)
        {

            var activities = new List&lt;ActivityDto&gt;();
            activities.AddRange(subProjects[i].Activities);
            for (var j = 0; j &lt; activities.Count; j++)
            {
                var resourceTypesForOrgs = activities[j].ActivityPersons.Where(x =&gt; x.ResourceType.OrganizationId == organiazaitonId).Count();

                if (resourceTypesForOrgs == 0)
                    activities.Remove(activities[j]);
            }

            subProjects[i].Activities = activities;

            if (subProjects[i].Children.Any())
                GetProjectAndActivitiesForByOrg(subProjects[i].Children, organiazaitonId);

        }
        children = subProjects;
        return children;
    }
Here's my attempt. I assume, LINQ-method based approach is allowed by your problem statement.

I have not tested the code, so please cover it by unit test(s) which you may already have.
Also, please notice that this is not a pure function in the functional sense of this term. It means, the method changes the state of the arguments passed in (which may or may not be desirable in different scenarios).

private IEnumerable&lt;SubProjectDto&gt; GetProjectAndActivitiesForByOrg(IEnumerable&lt;SubProjectDto&gt; children, Guid? organiazaitonId)
{
    return children.Select(childSubProject =&gt;
    {
        childSubProject.Activities.RemoveAll(activity =&gt;
                activity.ActivityPersons.All(person =&gt; person.ResourceType.OrganizationId != organiazaitonId));

        // if (childSubProject.Children.Any()) // UPD: This check is not really required
        GetProjectAndActivitiesForByOrg(childSubProject.Children, organiazaitonId);

        return childSubProject;
    });
}