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

时间:2016-10-11 13:36:19

标签: c# linq datatable

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

Datatable structure

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

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();

3 个答案:

答案 0 :(得分:3)

使用以下代码:

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

答案 1 :(得分:2)

Haven没有亲自尝试过,但可能还有其他事情:

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

答案 2 :(得分:2)

另一个选项会产生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"]