日期:2014-05-17  浏览次数:20871 次

关于Linq的group by的问题
from x in source.Rows.Cast<DataRow>()
group x by new { *** } into g
select new { Items = g };

group by 后面的***部分内容是不确定的,可能有多项,要如何写。
linq group?by

------解决方案--------------------

class EnumerableDataRowList<T> : IEnumerable<T>, IEnumerable
    {
        IEnumerable dataRows;
        internal EnumerableDataRowList(IEnumerable items)
        {
            dataRows = items;
        }
        IEnumerator<T> IEnumerable<T>.GetEnumerator()
        {
            foreach (T dataRow in dataRows)
                yield return dataRow;
        }
        IEnumerator IEnumerable.GetEnumerator()
        {
            IEnumerable<T> iEnumerable = this;
            return iEnumerable.GetEnumerator();
        }
    }

static StringBuilder stringBuilder = new StringBuilder();
        public static String GroupData(DataRow dataRow)
        {
            //这里的列你可以自己动态指定
            String[] columnNames = new[] { "Column1", "Column2"... };

            stringBuilder.Remove(0, stringBuilder.Length);
            foreach (String column in columnNames)
            {
                stringBuilder.Append(dataRow[column].ToString());
            }
            return stringBuilder.ToString();
        }

EnumerableDataRowList<DataRow> enumerableRowCollection = new EnumerableDataRowList<DataRow>(source.Rows);

            Func<DataRow, String> groupingFunction = GroupData;
var groupedDataRow = enumerableRowCollection.GroupBy(groupingFunction);


试试看