dtUnit1中有一列是"得分",为了获取得分高于60的记录,用linq进行查询. DataTable dtUnit1=new DataTable();
 ...//向dtUnit1中填入数据
 var dtUnit1topPerc = from items in dtUnit1.AsEnumerable()
                                where items.Field<double>("得分") > 60    
                                orderby (items.Field<double>("得分"))
                                select items;问题是某些记录的"得分"可能为空,这样执行上面语句时就会爆"无法将 DBNull.Value 强制转换为类型“System.Double”。请使用可空类型。"请问如何解决

解决方案 »

  1.   

    where items.Field<doule>("得分") is not null and items.Field<doule>("得分")>60
      

  2.   

    为什么不在给dtUnit1填入数据的时候就过滤掉为null?
      

  3.   

    var dtUnit1topPerc = from items in dtUnit1.AsEnumerable() 
                                    where items.Field <double?>("得分").Value > 60    
                                    orderby items.Field <double?>("得分") 
                                    select items;其实DataTable.Rows中的Row存储数据是object的,所以你上面可能要改一下改成这样var dtUnit1topPerc = from items in dtUnit1.AsEnumerable() 
                                    where int.Parse(items.Field <object>("得分").ToString()) > 60    
                                    orderby items.Field <object>("得分") 
                                    select items;
      

  4.   

    类型是object了还要泛型有何意义?
      

  5.   

    业务上需要null和0表示不同的意义:null表示还没有改完此人的卷子,0表示0分.