【问题标题】:Get a Maximum Date value from X tables in DataSet从 DataSet 中的 X 表中获取最大日期值
【发布时间】:2018-12-27 09:42:43
【问题描述】:

我有一个包含 1-3 个表的数据集,每个表都有一个名为 m_date 的列(字符串) 我想使用 LINQ 从所有这些中获取最大值。

我知道如何获取每个表的最大值:

var maxDate=ds.Tables[index].AsEnumerable()
              .Max(x=>DateTime.Parse(x["m_date"].ToString())).ToString();

但我不知道如何从所有表格信息中获取最大值

编辑:

我现在有这样的东西可以工作:

DateTime maxDate=DateTime.MinValue;

foreach  (DataTable tbl in ds.Tables)
{
     DateTime maxDateCur=ds.Tables[index].AsEnumerable()
                  .Max(x=>DateTime.Parse(x["m_date"].ToString()));
     maxDate=new DateTime[] {maxDateCur,maxDate}.Max();
}

但我觉得可以做得更好。

【问题讨论】:

    标签: c# linq datatable


    【解决方案1】:

    你可以这样做:

    var maxDate = Enumerable.Range(0, ds.Tables.Count)
            .SelectMany(index => ds.Tables[index].AsEnumerable())
            .Max(dataRow => dataRow.Field<DateTime>("m_date"))
            .ToString();
    
    • 使用Enumerable.Range 生成索引,使我们能够访问每个人DataTable
    • 使用SelectMany 获取单个IEnumerable&lt;DataRow&gt;
    • 使用Max 获取最大值并将其转换为字符串。

    略有不同的变体是:

    var maxDate = Enumerable.Range(0, ds.Tables.Count)
                    .Select(index =>
                        ds.Tables[index].AsEnumerable()
                            .Max(dataRow => dataRow.Field<DateTime>("m_date")))
                    .Max().ToString();
    
    • 使用Enumerable.Range 生成索引,使我们能够访问每个DataTable
    • 使用Select 得到一个IEnumerable&lt;DateTime&gt;,由每个DataTable 的最大DateTime 组成
    • 使用Max 获取日期时间的最大值,然后转换为字符串表示形式。

    【讨论】:

    • 效果很好,我所做的唯一更改是将字段更改为 DateTime.ParseExact,因为我的日期时间字符串是 dd/mm/yyyy
    • 并添加 .Where(x=>!string.IsNullOrEmpty(x.Field("col_name")))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2020-02-05
    • 2018-03-12
    • 2021-03-16
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多