C# &引用;无效的强制转换“;林克
我正在尝试用以下代码筛选数据表C# &引用;无效的强制转换“;林克,c#,asp.net,linq,C#,Asp.net,Linq,我正在尝试用以下代码筛选数据表 private void Filter(string text) { int outText=0; if (Int32.TryParse(text, out outText)) { text = string.Empty; } DataTable DT = new DataTable(); DT = PinCDAO.GetArea().
private void Filter(string text)
{
int outText=0;
if (Int32.TryParse(text, out outText))
{
text = string.Empty;
}
DataTable DT = new DataTable();
DT = PinCDAO.GetArea().AsEnumerable().Where(r => r.Field<int>("AreaID")==Convert.ToInt32(outText) || (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable();
}
private void过滤器(字符串文本)
{
int-outText=0;
if(Int32.TryParse(text,out-outText))
{
text=string.Empty;
}
DataTable DT=新的DataTable();
DT=PinCDAO.GetArea().AsEnumerable().Where(r=>r.Field(“AreaID”)==Convert.ToInt32(outText)| |(r.Field(“AreaDescription”).Contains(text)).AsDataView().ToTable();
}
由于代码原因,我收到错误“指定的强制转换无效”
r => r.Field<int>("AreaID")==Convert.ToInt32(outText)
r=>r.Field(“AreaID”)==Convert.ToInt32(outText)
我确信AreaID列包含整数
请帮助我解决这个问题。删除Convert.ToInt32,outText已经使用
if(Int32.TryParse(text,out-text))解析为int
DT=PinCDAO.GetArea().AsEnumerable()
其中(r=>r.Field(“AreaID”)==outText
||(r.字段(“区域描述”)
.Contains(text))).AsDataView().ToTable();
出现异常的原因可能是“AreaID”可能不包含int值您不需要转换为
int
,因为outText
已经声明为int
…您可以通过以下方式使用outText
:
r => r.Field<int>("AreaID")==outText
r => Convert.ToInt32(r["AreaID"])==outText
作为输出参数传递的变量在传递之前不需要初始化。此外,outtext不需要转换为Int32,因为它已经是Int32了
private void Filter(string text) {
int outText;
if (Int32.TryParse(text, out outText))
{
// text was integer and parsed successfully.
text = string.Empty;
}
DataTable DT = new DataTable();
DT = PinCDAO.GetArea().AsEnumerable().Where(r => r.Field<int>("AreaID")== outText || (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable(); }
private void过滤器(字符串文本){
int输出文本;
if(Int32.TryParse(text,out-outText))
{
//文本为整数,已成功解析。
text=string.Empty;
}
DataTable DT=新的DataTable();
DT=PinCDAO.GetArea().AsEnumerable().Where(r=>r.Field(“AreaID”)==outText | |(r.Field(“AreaDescription”).Contains(text)).AsDataView().ToTable()}
尝试代码-在代码中处理null
因为“AreaID”是可为空的字段
DT = PinCDAO.GetArea().AsEnumerable().Where(r =>
(Convert.IsDBNull(r["AreaID"]) ? 0 : Convert.ToInt32(r["AreaID"])) ==outText
|| (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable();
DT=PinCDAO.GetArea().AsEnumerable().Where(r=>
(Convert.IsDBNull(r[“AreaID”])?0:Convert.ToInt32(r[“AreaID”])==outText
||(r.Field(“AreaDescription”).Contains(text)).AsDataView().ToTable();
这段代码很容易处理空值
已经回答了我的问题:当
outText
已经是整数时,为什么要调用Convert.ToInt32(outText)
呢?其中一条记录的“AreaID”是否为空?AreaID是否允许为空?你能告诉我们更多关于它的情况吗?你尝试过解决方案吗..它对你有用吗..?他没有提到AreaID可以为空。是吗?@ebad86-但这种问题主要发生在数据库中的可空字段上……我在我的代码中发现了相同的问题,这很容易解决问题……@ebad86-检查一下:你有一个有效的优点。我已经问过他,让我们看看他是如何回复的。设置一个断点,看看表中有什么内容,字段“AreaID”是否包含整数值或其他内容?或者如果可以为空,请尝试r.field(“AreaID”)
DT = PinCDAO.GetArea().AsEnumerable().Where(r =>
(Convert.IsDBNull(r["AreaID"]) ? 0 : Convert.ToInt32(r["AreaID"])) ==outText
|| (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable();