2013-05-27 2 views
1

У меня есть один объект-источник, который является IEnumerable <T> где T может быть либо классом, либо группировкой или вложенной IGrouping.Как определить вложенную группу в Linq?

Как определить, является ли это вложенной группой или отдельной группой или нет сгруппированы?

+0

У меня есть awnser ... но это так чертовски уродлив, что я не хочу оставлять его :( –

+0

Thats OK джан, пожалуйста поделитесь ответом – hajirazin

+0

Отправлено ... Надеюсь, это поможет вам –

ответ

1

Быстрый и грязный подход, но не очень хороший из-за могучих string выравниваний.

public bool isOrHasGrouping<T>(IEnumerable<T> coll) 
{ 
    return 
     typeof(T).Name.Contains("IGrouping") 
      ? true 
     : (typeof(T).ContainsGenericParameters 
      ? typeof(T).GenericTypeArguments 
        .Any(item => item.Name.Contains("IGrouping")) 
      : false); 
} 
+1

Название «IGrouping», вероятно, не изменится в будущем, так что это не так грязно, но простой «Содержит» может возвращать ложные срабатывания. Лучше использовать более подробное условие типа 'type.IsGenericType && type.GetGenericTypeDefinition() == typeof (IGrouping <>)'. Но, если вам действительно не нравятся ложные срабатывания, тогда 'type.FullName.Contains (« IGrouping »)', вероятно, будет достаточно;) – quetzalcoatl

2

Это сработало для меня. Благодаря января Ниже функция я взял из Вашего ответа:

public static bool HasInnerGrouping<T>(this IEnumerable<T> coll) 
{ 
    return typeof(T).GenericTypeArguments.Any(item => item.Name.Contains("IGrouping")); 
} 
Смежные вопросы