【问题标题】:How to get Max String Length in every Column of a Datatable如何在数据表的每一列中获取最大字符串长度
【发布时间】:2010-11-06 09:59:24
【问题描述】:

我有一个 DataTable 对象。每列都是字符串类型。

使用 LINQ,如何获得每列的最大字符串长度?

【问题讨论】:

    标签: c# .net linq datatable max


    【解决方案1】:

    整个表的最大字符串长度:

    int? maxStringLength = dataTable.AsEnumerable()
        .SelectMany(row => row.ItemArray.OfType<string>())
        .Max(str => str?.Length);
    

    如果您想要 每个 列的最大字符串长度,您可以这样做:

    List<int?> maximumLengthForColumns = 
       Enumerable.Range(0, dataTable.Columns.Count)
           .Select(col => dataTable.AsEnumerable()
                .Select(row => row[col]).OfType<string>()
                .Max(val => val?.Length)
           ).ToList();
    

    【讨论】:

    • 获取整个表中最长字符串的长度。我需要每列中最长字符串的长度。
    【解决方案2】:

    使用 c# 6,可以通过添加 val?.Length 来防止异常

    var maximumLengthForColumns =
                    Enumerable.Range(0, dt.Columns.Count)
                    .Select(col => dt.AsEnumerable()
                                         .Select(row => row[col]).OfType<string>()
                                         .Max(val => val?.Length )).ToList();
    

    【讨论】:

    • 你不是说 IEnumerable 吗?枚举在 C# 中未定义
    • @roncansan 的代码效果很好。但是如何在“var maximumLengthForColumns”中获得 {ColumnName, MaxLength} 对?或者是否“保证”“var maximumLengthForColumns”中的 MaxLength 值将与表中列的确切顺序一致。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多