我正在尝试使用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"
如何避免此异常?
答案 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();