Asp.net 避免LINQ中的空值异常
我正在尝试使用LINQ筛选数据表Asp.net 避免LINQ中的空值异常,asp.net,linq,Asp.net,Linq,我正在尝试使用LINQ筛选数据表 DataTable DT=new DataTable(); DT = PinDicDAO.GetContractPOVD().AsEnumerable().Where(r => (r.Field<string>("ContractPOReference").ToUpper().Contains(text.ToUpper())) || (r.Field<string>("ContractPO").ToUpper().Contains(
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();
如何避免此异常?在尝试使用它之前,请检查是否存在空值。您最好使用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();
var query=来自PinDicDAO.GetContractPOVD().AsEnumerable()中的r
让ContractPOReference=r.Field(“ContractPOReference”)
让ContractPO=r.字段(“ContractPO”)
让ContractPOTitle=r.Field(“ContractPOTitle”)
let Address=r.字段(“地址”)
其中(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()))
选择r;
DT=query.AsDataView().ToTable();
只要在您怀疑的地方添加空检查即可。例如,r.Field(“ContractPOReference!”=null…
出现异常“使用投影后无法创建数据视图”。在第DT=query.AsDataView().ToTable()行上;您也可以使用linq方法,如r.Field(“ContractPOReference”)!=null和&r.Field(“ContractPOReference”).ToUpper()包含(text.ToUpper())
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();