过滤没有LINQ的DataTable?

时间:2011-08-29 13:32:07

标签: c# .net datatable .net-2.0

如何在不使用LINQ的情况下过滤数据表?我当前正在使用.NET 2.0;因此,我无法使用LINQ。我有一个返回房间/费率对的存储过程。我想过滤数据表,以便选择特定房间的所有房价,所以基本上是这样的:

SELECT Rates FROM TABLE1 WHERE Room = @Room.

我可以使用DataTable执行此操作,还是创建另一个存储过程以避免使用内联sql更好?

3 个答案:

答案 0 :(得分:3)

您可以使用默认视图的filter属性,如下所示:

dt.DefaultView.RowFilter = "SomeColumn > 0";    
dt = dt.DefaultView.ToTable();

您也可以使用Select方法:

dt = dt.Select("SomeColumn > 0").CopyToDataTable();

答案 1 :(得分:2)

您可以使用DataTable's Select method

执行此操作
// if table is your DataTable
DataRow[] foundRows =table.Select("Room = " + roomName);

至于决定你想要这样做,或者如果最好重写你的存储过程以接受@room参数,它取决于: 如果总行数不多,而且如果你经常更改所选择的房间,那么以你正在做的方式执行它可能会更好(在整个内存中保留一个DataTable并为不同的房间过滤)< / p>

答案 2 :(得分:2)

当然存储过程是可行的,考虑到你也可以在存储中将参数设置为NULL,这样你在null时忽略它或在提供值时使用它。

从.NET端,您还可以选择满足过滤条件的DataTable的DataRows子集,如下所示:

DataRow[] rows = myTable.Select("Room = '1'");

但正如我所说,服务器端过滤效果更好,网络中的数据移动更少....