C# 如何从数据表中获取最高值?

C# 如何从数据表中获取最高值?,c#,linq,datatable,C#,Linq,Datatable,我有一个datatable,它有几个列。我想返回一个与我的id匹配的,在verlabel列中具有最高值,在本例中我想返回1.1 我如何做到这一点?当前代码只是将列名返回到我的字符串变量中,而不是实际值 Namespace.EnquiryEngine.DataLists ds2 = new Namespace.EnquiryEngine.DataLists("VERSION"); Namespace.Common.KeyValueCollection ds2params = new Namesp

我有一个
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();
var highestVersion=(来自dt.AsEnumerable()中的行)
其中row.Field(“id”)==doc.id
选择row.Field(“verlabel”).Max();

我自己还没有试过,但可能是有什么原因:

var highestVersion = (from row in dt.AsEnumerable()
                      where row.Field<string>("id") == class.ID
                      select row.Field<double>("verlabel")).Max();
var highestVersion=(来自dt.AsEnumerable()中的行)
其中row.Field(“id”)==class.id
选择row.Field(“verlabel”).Max();

另一个选项将产生
数据行
,从中可以选择任何相关的
,只要该列不为

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

var result = dataRow?["ColumnName"]
var dataRow=dt.AsEnumerable()
.Where(row=>row.Field(“id”)==class.id)
.OrderByDescending(行=>row.Field(“verlabel”))
.FirstOrDefault();
var结果=数据行?[“ColumnName”]

使用以下代码:

var res = dt.AsEnumerable().where(a => a.Field<String>("id") == class.ID).Select(b => b.Field<double>>("verlabel").Max();
var res=dt.AsEnumerable()。其中(a=>a.Field(“id”)==class.id)。选择(b=>b.Field>(“verlabel”).Max();

看看这将导致
加倍
而不是
数据行
我喜欢这个答案的外观-简单而中肯。不幸的是,我得到了关于
系统.Data.EnumerablerRowCollection
的例外,没有包含
max
的定义。有什么想法吗?@GiladGreen我现在有点放弃了。我“我毫不怀疑您的解决方案(以及您的,Mrinal)在任何其他环境中都能工作。我认为可能正是这个应用程序需要调用一些定制的方法。我将进行调查。感谢您和我的想法在windows上始终保持系统重启和Visual studio重启作为装甲中可能的选项,总是很方便,一切都非常好:)@GiladGreen这似乎是供应商SDK的问题,而不是代码本身的问题。我在SDK之外成功地测试了它,与供应商一样,没有出现任何问题。。。