Datatable.Select with max(col)和WHERE子句?

时间:2014-02-05 21:22:21

标签: c#

我有一个包含以下数据的数据表。

Week    Score           Rank
1       75.8300000000   1
2       76.6800000000   9
3       79.8787870000   4
4       0               0
5       0               0
6       0               0
7       0               0
...
53      0               0

如果数据表只有前3周(有Rank的几周),那么以下行将完美地工作。但是现在我需要添加一个获得MAX(Week)的WHERE子句,其中Score大于0.在这种情况下,返回的行将是第3周。本质上,查询将是SELECT max(week)From datatable 其中Rank> 0

DataRow[] dr = dsRanks.Tables[0].Select("Week = MAX(Week)");

我尝试了以下操作,但是我收到索引错误,因为返回了0行。

DataRow[] dr = dsRanks.Tables[0].Select("Week = MAX(Week) and Rank > 0");

感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:6)

使用LINQ更容易解决:

var week = dsRansk.Tables[0].AsEnumerable()
    .Where(row => row.Field<int>("Rank") > 0)
    .Max(row => row.Field<int>("Week"));

答案 1 :(得分:0)

在我看来,您希望具有最高编号周的数据行具有有效数据。这样的事情应该这样做:

var dr = dsRanks.Tables[0].Select("Rank > 0", "Week ASC"). LastOrDefault();

根据您的示例,dr是第3周的数据行。