C# 谓词上的“对象引用未设置为对象的实例”
我正在尝试查找哪些字段具有或包含某些内容的客户端。如果我硬编码谓词,一切都会工作,但当我传递谓词时,它会抛出一个NullReferenceException 回购代码:C# 谓词上的“对象引用未设置为对象的实例”,c#,sql,entity-framework,contains,predicate,C#,Sql,Entity Framework,Contains,Predicate,我正在尝试查找哪些字段具有或包含某些内容的客户端。如果我硬编码谓词,一切都会工作,但当我传递谓词时,它会抛出一个NullReferenceException 回购代码: public IEnumerable<Contractor> Find(Func<Contractor, bool> predicate) { var test = db.Contractors.Where(x => x.NIP.Contains("7822574676")).ToList(
public IEnumerable<Contractor> Find(Func<Contractor, bool> predicate)
{
var test = db.Contractors.Where(x => x.NIP.Contains("7822574676")).ToList(); //this is correct
try
{
return db.Contractors.Where(predicate).ToList(); // this gives exception
}
catch (Exception ex)
{
return null;
}
}
服务代码:
public IEnumerable<ContractorShortDataDTO> FindByNIP(string NIP)
{
try {
return Database.Contractors.Find(x => x.NIP.Contains(NIP)).Select(x =>
new ContractorShortDataDTO()
{
NIP = x.NIP,
CompanyName = x.CompanyName,
ID = x.ID
}).AsEnumerable();
} catch(Exception ex) {
return null;
}
}
该代码有什么问题?将方法中的参数类型从
Func<Contractor, bool> predicate
到
另请参见相关问题NIP是否已获得值?@JamesS yes sir此错误在哪一行抛出?@JamesS'返回db.Contractors.Wherepredicate.ToList;'因为您有Func谓词,所以整个表在客户机上获取,然后过滤,这意味着NIP为null的行将抛出NIP.Contains。您应该使用表达式将其转换为SQL。
Expression<Func<Contractor, bool>> predicate