在LINQ中避免Null值异常

时间:2012-07-13 11:20:35

标签: asp.net linq

我正在尝试使用LINQ过滤DataTable

DataTable DT=new DataTable();
DT = PinDicDAO.GetContractPOVD().AsEnumerable().Where(r => (r.Field<string>("ContractPOReference").ToUpper().Contains(text.ToUpper())) || (r.Field<string>("ContractPO").ToUpper().Contains(text.ToUpper())) ||
                                   (r.Field<string>("ContractPOTitle").ToUpper().Contains(text.ToUpper())) || (r.Field<string>("Address").ToUpper().Contains(text.ToUpper()))
                                   ).AsDataView().ToTable();

查询工作正常。但是当某些字段具有NULL值时,它会产生异常。

"Object Reference Not set to an instance of object"

如何避免此异常?

1 个答案:

答案 0 :(得分:1)

在尝试使用它之前检查空值。您最好使用linq关键字,这样您就可以使用let并使其更具可读性:

var query = from r in PinDicDAO.GetContractPOVD().AsEnumerable()
                        let ContractPOReference = r.Field<string>("ContractPOReference")
                        let ContractPO = r.Field<string>("ContractPO")
                        let ContractPOTitle = r.Field<string>("ContractPOTitle")
                        let Address = r.Field<string>("Address")
                        where (ContractPOReference != null && ContractPOReference.ToUpper().Contains(text.ToUpper())) ||
                           (ContractPO != null && ContractPO.ToUpper().Contains(text.ToUpper())) ||
                           (ContractPOTitle != null && ContractPOTitle.ToUpper().Contains(text.ToUpper())) ||
                           (Address != null && Address.ToUpper().Contains(text.ToUpper()))
                        select r;

            DT = query.AsDataView().ToTable();