我尝试执行此Linq请求:
var lqClassResult = from classItem in this.dataSet._class.AsEnumerable()
join namespaceItem in this.dataSet._namespace.AsEnumerable()
on classItem.Field<int>("namespace_id") equals namespaceItem.Field<int>("id")
where classItem.Field<string>("class_name").ToLowerInvariant().Contains(className.ToLowerInvariant()) &&
namespaceItem.Field<string("namespace_name").ToLowerInvariant().Contains(namespaceName.ToLowerInvariant())
orderby namespaceItem.Field<string>("namespace_name"),classItem.Field<string>("class_name")
select new {
class_name = classItem.Field<string>("class_name"),
namespace_name = namespaceItem.Field<string>("namespace_name")
};
但是当我执行它时,Visual Studio因为这行而抛出一个NullReferenceException:
where子句中的
namespaceItem.Field("namespace_name").ToLowerInvariant().Contains(namespaceName.ToLowerInvariant())
。
如果有人能帮助我,那就太棒了
答案 0 :(得分:0)
尝试
on classItem.Field<int>("namespace_id") equals namespaceItem.Field<int>("id")
let namespaceName = namespaceItem.Field<string("namespace_name")
where classItem.Field<string>("class_name").ToLowerInvariant().Contains(className.ToLowerInvariant()) && namespace != null &&
namespace.ToLowerInvariant().Contains(namespaceName.ToLowerInvariant())
答案 1 :(得分:0)
我会猜测 namespaceItem.Field("namespace_name")
正在返回null。
这是该方法的有效返回值吗?如果没有,请检查您的基础代码。
如果 是有效的返回值,那么在调用ToLowerInvariant()之前需要检查null:
var lqClassResult = from classItem in this.dataSet._class.AsEnumerable()
join namespaceItem in this.dataSet._namespace.AsEnumerable()
on classItem.Field<int>("namespace_id") equals namespaceItem.Field<int>("id")
where classItem.Field<string>("class_name").ToLowerInvariant().Contains(className.ToLowerInvariant()) &&
namespaceItem.Field<string("namespace_name") ! = null &&
namespaceItem.Field<string("namespace_name").ToLowerInvariant().Contains(namespaceName.ToLowerInvariant())
orderby namespaceItem.Field<string>("namespace_name"),classItem.Field<string>("class_name")
select new {
class_name = classItem.Field<string>("class_name"),
namespace_name = namespaceItem.Field<string>("namespace_name")
};
请注意额外的空检查:
namespaceItem.Field<string("namespace_name") ! = null &&
但是,这只是一个猜测:您需要确定空值的来源。
答案 2 :(得分:0)
2种可能性:
字段( “namespace_name”)
返回null,因为没有字段 -
字段( “namespace_name”)。ToLowerInvariant()。
返回null,因为namespace_name中的VALUE为null,因此ToLowerInvariant也返回null,这将使包含内容爆炸。