在我的数据表中,我有两行有多列。
其中一列为ItemID
,其值为2215,2216
。
当我使用以下声明时:
DataRow[] dr = dt.Select("ItemID='2215'");
它返回两行。它没有过滤。
我缺少什么?
答案 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");
这应该有效