DataTable.Select()不起作用

时间:2013-12-30 12:00:11

标签: c# sql-server datatable

在我的数据表中,我有两行有多列。

其中一列为ItemID,其值为2215,2216

当我使用以下声明时:

DataRow[] dr = dt.Select("ItemID='2215'");

它返回两行。它没有过滤。

我缺少什么?

7 个答案:

答案 0 :(得分:3)

如果您的表格中包含您所描述的结构数据,那么这应该有效。

var dr = from row in dt.AsEnumerable()
    where row.Field<int>("ItemID") == 2215
    select row;

DataTable dtSelected = dr.CopyToDataTable();

答案 1 :(得分:1)

试试这个

DataRow[] dr = dt.Select("ItemID=2215");

答案 2 :(得分:1)

您的ItemID可能是int类型,int类型中不需要单引号。

试试这个

DataRow[] dr = dt.Select("ItemID=2215");

答案 3 :(得分:1)

试试这个:

foreach (DataRow row in ds.Tables[0].Select("PeriodName='" + dr["PeriodName"].ToString() + "'")){
    row["PeriodName"].ToString()
}

答案 4 :(得分:0)

如果itemID是整数,那么你不知道单引号。

DataRow[] dr = dt.Select("ItemID=2215");

答案 5 :(得分:0)

我今天遇到了一个非常类似的问题,我发现它与先前对数据表的更改尚未被接受有关。在致电.Select(...)之前尝试接受更改。正如其他人所提到的那样,如果ItemID始终是int,则不需要单引号(我不认为这是您问题的原因)。

dt.AcceptChanges();
DataRow[] dr = dt.Select("ItemID=2215");

我还尝试添加基本上DataViewRowState过滤器的每个组合,但没有组合工作!有些人没有返回任何记录,有些人只返回修改过的记录(即使我包含Unchanged)。

DataRow[] dr = dt.Select("ItemID=2215",
    DataViewRowState.OriginalRows|DataViewRowState.CurrentRows);

注意:OriginalRows | CurrentRows相当于“所有行状态”。我也尝试了其他组合。

答案 6 :(得分:0)

根据@SidM的评论我使用了这种方法

DataRow[] dr = dt.Select("Convert(ItemID, 'System.Int32') =2215");

这应该有效