尝试获取列表在同一结果列中每列的不同值计数

时间:2012-05-29 17:36:53

标签: c# sql linq

因此,对于这个例子,假设我有一个名为dt的DataTable,它有一些列,我想找回列名列表以及每列中有多少个不同的值。此外,我希望结果集按最大值排列到最小值

例如,我有一个包含4列和40行数据的表,在第一列中有4个不同的值,第二列12,第三列20,第四列40.我希望我的结果集看起来像这样< / p>

Column4 40
Column3 20
Column2 12
Column1 4

我怎样才能使用C#和Linq实现这一目标?

2 个答案:

答案 0 :(得分:3)

您的LINQ代码

var result = dt.Columns
    .Cast<DataColumn>()
    .Select(dc => new {
        Name = dc.ColumnName,
        Values = dt.Rows
            .Cast<DataRow>()
            .Select(row => row[dc])
            .Distinct()
            .Count()})
    .OrderBy(item => item.Values);

答案 1 :(得分:0)

var result =
    dt.Columns
        .Cast<DataColumn>()
        .Select(c =>
            new
            {
                c.ColumnName,
                DistinctValuesCount =
                    dt.Rows
                        .Cast<DataRow>()
                        .Select(r => r[c])
                        .Distinct()
                        .Count()
            })
        .OrderByDescending(i => i.DistinctValuesCount)
        .ToArray();