public static ITableIndexInfo CreateTableIndexInfo(IGrouping <string, DbSetInfo.ColumnAndIndex> grouping,
                                                           string tableName)
        {
            var list      = grouping.ToList();
            var indexInfo = new TableIndexInfo
            {
                IndexName = grouping.Key,
                Fields    = list.OrderBy(q => q.IndexInfo.Order)
                            .Select(q => new TableIndexFieldInfo
                {
                    FieldName    = q.Column.ColumnName,
                    IsDescending = q.IndexInfo.IsDescending
                }).ToArray(),
                IndexType = AggregateIndexType(list)
            };

            if (indexInfo.IndexType == IndexType.FullTextIndex)
            {
                indexInfo.FullTextCatalogName = AggregateFullTextCatalogName(list, tableName);
            }
            return(indexInfo);
        }
        public static ITableIndexInfo CreateTableIndexInfo(IGrouping <string, DbSetInfo.ColumnAndIndex> grouping,
                                                           string tableName)
        {
            var list      = grouping.ToList();
            var indexInfo = new TableIndexInfo(grouping.Key)
            {
                Fields = list.OrderBy(q => q.IndexInfo.Order)
                         .Select(q => new TableIndexFieldInfo
                {
                    FieldName    = q.Column.ColumnName,
                    IsDescending = q.IndexInfo.IsDescending
                }).ToArray(),
                IndexType = AggregateIndexType(list),
            };

            if (indexInfo.IndexType == IndexType.FullTextIndex)
            {
                indexInfo.FullTextCatalogName = AggregateFullTextCatalogName(list, tableName);
            }
#if EF200
            var filters = list
                          .Select(a => a.IndexInfo.Filter)
                          .Where(a => !string.IsNullOrEmpty(a))
                          .Distinct()
                          .ToArray();
            if (filters.Length > 1)
            {
                throw new InvalidIndexFilterException(
                          $"Two or more different filters for single index i.e. '{filters[0]}' and '{filters[1]}'",
                          (ITableIndexInfo)indexInfo);
            }
            indexInfo.Filter = filters.FirstOrDefault();
#endif

            return(indexInfo);
        }