Trying to get a list of properties dynamically where count > 0

I have a model like so

public class UserModel
{
    List<UserModel> users
}
public class UserModel
{
    public List<UserSomeObj> userSomeObj { get; set; }
    public List<UserSomeOtherObj> userSomeOtherObj { get; set; }
}
public class UserSomeObj
{
    public int someIntProperty { get; set; }
    public string someStringProperty { get; set; }
}
public class UserSomeOtherObj
{
    public int someIntProperty { get; set; }
    public string someStringProperty { get; set; }
}

Each UserModel class List is comprised of several other class Lists.

I am referencing them dynamically like so by looping over a list of targeted properties.

to get a list of properties matching the 'prop' variable;

var props = MethodToGetTargetedProperties(); 
// props example content would be a list of strings like so "UserSomeObj", "UserSomeOtherObj"
foreach (var prop in props)
{
    var results = users.Select(x => x.GetPropertyValue(prop)).ToList();
    //results contain lists of prop where count == 0 and i dont want them
}

what I am trying to do is reduce the results where count of the lists targeted is greater than 0 .... problem is that I can't find the correct order/syntax to get it to work.

Thanks

Jon Skeet
people
quotationmark

As List<T> implements the non-generic ICollection interface, you can cast to that:

var results = users.Select(x => x.GetPropertyValue(prop))
                   .Cast<ICollection>()
                   .Where(list => list.Count > 0)
                   .ToList();

You could do the cast within the Where if you want, although I prefer the above:

var results = users.Select(x => x.GetPropertyValue(prop))
                   .Where(list => ((ICollection) list).Count > 0)
                   .ToList();

people

See more on this question at Stackoverflow