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();