如何在datarow []中的列中查找最大值?

时间:2011-07-30 18:31:55

标签: c# ienumerable max datarow icomparable

我有一个简单的问题,但我不明白我在这里或在MSDN中找到的任何示例。 (我还是C#和所有数据集函数的新手。)

我有一个数据表“tblRoom”,其中的columms是“建筑”,“公寓”和“房间”,它们都是整体和桌子的主键(它是公寓的弱实体(这是建筑物的弱实体) )没有其他属性/列)。

我还DataRow[] roomCollection使用以下代码选择建筑物中的特定公寓:

roomCollection = dbDataSet.tblRoom.Select("building ='"+ b_int + 
                                          "' and apartment='"+ a_int + "'");

这一切都运行良好(我猜......)。 现在我想从这间公寓(这间公寓的最大房间号)获得房间的最大价值。 我试图无法利用这些代码:

DataRow dr = roomCollection.Max();
int maxi = roomCollection.Max();

我只是没有从工具提示中得到我想在函数中写的内容。它会抛出没有IEnumerable或Icomparable的异常。

我需要编写什么来获取房间栏中的最大值(int)?任何人都知道一个“傻瓜的东西”,这可以解释为白痴,因为我不明白我想在Max()写的错误/工具提示的含义。

编辑: 工具提示建议输入这些(显示相关性):

(this IEnumerable <DataRow> source):DataRow
(this IEnumerable <DataRow> source, Func<DataRow,int?> selector):int?
(this IEnumerable <DataRow> source, Func<DataRow,int> selector):int

我真的不明白:(

非常感谢, 吉文。

3 个答案:

答案 0 :(得分:3)

int roomno = roomCollection.Max (r => (int) r["room"]);

答案 1 :(得分:1)

在这种情况下,您可能希望将选择器传递给Max()以正确识别您想要最大的列。

int max = roomCollection.Max(dr => (int)dr["room"]);

答案 2 :(得分:1)

由于roomCollection是DataRows数组,DataRow dr = roomCollection.Max();表示从roomCollection中选择最大DataRow。但是,DataRow比另一个DataRow更大意味着什么呢?一般来说,没有任何有用的比较,这就是.Max()失败的原因。

从技术上讲,DataRow没有实现IComparable,因为在比较两个DataRow并告诉哪个是“更大”或“更小”的通用有用。但是对于整数,因为2大于1。

您需要做的是将选择器功能传递给Max(),告诉它您要查找的最大值。因此,正如其他答案指示您需要使用:

int max = roomCollection.Max(dr => (int)dr["room"]);

这表示每个DataRow选择room的整数值并获得最大房间值。

.Max()函数是.NET 3.5中添加的Linq(语言集成查询)的一部分。所以你需要阅读它以更好地了解正在发生的事情。我发现101 Linq Samples很有用,因为它显示了几乎所有你想要做的事情的例子。