Linq中的“无效演员阵容”

时间:2012-07-03 06:18:31

标签: 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().AsEnumerable().Where(r => r.Field<int>("AreaID")==Convert.ToInt32(outText) || (r.Field<string>("AreaDescription").Contains(text))).AsDataView().ToTable();

}

我收到错误“指定演员表无效”。因为代码

r => r.Field<int>("AreaID")==Convert.ToInt32(outText) 

我确定AreaID列包含整数

请帮助我解决这个问题。

4 个答案:

答案 0 :(得分:2)

试用代码 - 在代码中处理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();

这段代码很容易处理空值..

已经回答了我的问题:"Specified cast is not valid" error in LINQ's orderby clause

答案 1 :(得分:1)

删除Convert.ToInt32,outText已使用if (Int32.TryParse(text, out outText))

解析为int
DT = PinCDAO.GetArea().AsEnumerable()
          .Where(r => r.Field<int>("AreaID")==outText 
                           || (r.Field<string>("AreaDescription")
           .Contains(text))).AsDataView().ToTable();

您获得异常的原因可能是“AreaID”可能不包含int值

答案 2 :(得分:1)

您无需转换为int outText已宣布为int ....您只需按以下方式使用outText

r => r.Field<int>("AreaID")==outText 

您可以通过以下方式更改expresson:

 r => Convert.ToInt32(r["AreaID"])==outText 

答案 3 :(得分:1)

作为out参数传递的变量不需要在传递之前初始化。此外,outtext不需要转换为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();  }