3

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

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

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

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

所有这一切都运行良好(我猜......)。现在我想从这间公寓获得房间的最大值(这间公寓的最大房间号)。我试过这些代码无济于事:

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

我只是没有从工具提示中得到我想在函数中写什么。它在没有 IEnumerable 或 Icomparable 时抛出异常。

我需要写什么来获得房间列中的最大值(int)?任何人都知道“傻瓜的 [something]”,它会向白痴解释它,因为我不明白错误/工具提示的含义,我想在Max().

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

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

我真的不明白:(

谢谢你,谢伊。

4

3 回答 3

3

尝试

int roomno = roomCollection.Max (r => (int) r["room"]);
于 2011-07-30T18:35:26.110 回答
1

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

int max = roomCollection.Max(dr => (int)dr["room"]);
于 2011-07-30T18:34:53.440 回答
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 选择房间的整数值并获得最大房间值。

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

于 2011-07-30T18:48:59.190 回答