【问题标题】:How to get the highest value from a datatable?如何从数据表中获取最高值?
【发布时间】:2016-10-11 22:06:49
【问题描述】:

我有一个datatable,它有几列。我想返回与我的 id 匹配的那个,在verlabel 列中具有最高值,在这种情况下我想返回 1.1

我如何实现这一目标?当前代码只是将列名返回到我的字符串变量中,而不是实际值。

Namespace.EnquiryEngine.DataLists ds2 = new Namespace.EnquiryEngine.DataLists("VERSION");
Namespace.Common.KeyValueCollection ds2params = new Namespace.Common.KeyValueCollection();
ds2params.Add("id", class.ID); 
ds2.ChangeParameters(ds2params);
System.Data.DataTable dt = ds2.Run(false) as System.Data.DataTable;
String version = Convert.ToString(dt.Rows[0]["version"]);

新代码:

var highestVersion = (from row in dt.AsEnumerable() 
                  where row.Field<int>("id") == doc.ID
                  select row.Field<double>("verlabel")).Max();

【问题讨论】:

标签: c# linq datatable


【解决方案1】:

另一个选项将产生DataRow,可以从中选择任何相关的Column,前提是它不是Null

var dataRow =   dt.AsEnumerable()
                            .Where(row => row.Field<string>("id") == class.ID)
                            .OrderByDescending(row => row.Field<double>("verlabel"))
                            .FirstOrDefault();

var result = dataRow?["ColumnName"]

【讨论】:

    【解决方案2】:

    使用以下代码:

    var res = dt.AsEnumerable().where(a => a.Field<String>("id") == class.ID).Select(b => b.Field<double>>("verlabel").Max();
    

    【讨论】:

      【解决方案3】:

      我自己没有尝试过,但可能有一些类似的东西:

      var highestVersion = (from row in dt.AsEnumerable()
                            where row.Field<string>("id") == class.ID
                            select row.Field<double>("verlabel")).Max();
      

      【讨论】:

      • 这将导致 double 不是 DataRow 预期的那样
      • 我喜欢这个答案的外观 - 简单明了。不幸的是,我遇到了关于System.Data.EnumerableRowCollection&lt;double&gt; 的例外情况,其中不包含max 的定义。有什么想法吗?
      • @GiladGreen 我现在有点放弃了。我毫不怀疑您的解决方案(以及您的 Mrinal)将适用于任何其他环境。我认为只是这个应用程序可能需要调用一些定制的方法。我会调查的。不过还是谢谢你们
      • 在 windows 上时,始终保持系统重启和 Visual Studio 重启作为 armour 中的可能选项,总是很方便,一切顺利:)
      • @GiladGreen 这似乎是供应商的 SDK 的问题,而不是代码本身的问题。我成功地在 SDK 之外对其进行了测试,没有出现供应商的问题......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2018-01-01
      相关资源
      最近更新 更多