сгладить результат запроса linq - PullRequest
1 голос
/ 15 декабря 2011

Я использую запрос linq, чтобы получить имена всех свойств всех классов, производных от некоторого указанного класса, например:

    /// <summary>
    /// Gets all visible properties of classes deriving from the specified base type
    /// </summary>
    private HashSet<string> GetDerivedPropertyNames(Type baseType)
    {
        // get all property names of the properties of types that derive from the base type
        var propertyNames =
            from type in baseType.Assembly.GetTypes()
            where type.IsSubclassOf(baseType)
            select Array.ConvertAll(type.GetProperties(), property => property.Name);
        // the hashset constructor will filter out all duplicate property names
        return new HashSet<string>(propertyNames);
    }

, однако это не компилируется, поскольку результат запроса linqIEnumerable<string[]>, тогда как я хотел получить IEnumerable<string>.как мне свести результаты в один IEnumerable<string>?

1 Ответ

2 голосов
/ 15 декабря 2011

Думаю, вы захотите SelectMany:

var propertyNames = baseType.Assembly.GetTypes()
 .Where(type => type.IsSubclassOf(baseType))
 .SelectMany(type => type.GetProperties().Select(property => property.Name));

Возможно, в том числе с Различным шагом сразу:

var propertyNames = baseType.Assembly.GetTypes()
 .Where(type => type.IsSubclassOf(baseType))
 .SelectMany(type => type.GetProperties().Select(property => property.Name))
 .Distinct();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...