我有一个简单的问题,但我不明白我在这里或在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
我真的不明白:(
非常感谢, 吉文。
答案 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很有用,因为它显示了几乎所有你想要做的事情的例子。