Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 避免LINQ中的空值异常_Asp.net_Linq - Fatal编程技术网

Asp.net 避免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(

我正在尝试使用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(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();