Linq请求中的Where语句
本文关键字:Where 语句 请求 Linq | 更新日期: 2023-09-27 18:12:17
我尝试执行这个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,因为这一行:
namespaceItem.Field("namespace_name").ToLowerInvariant().Contains(namespaceName.ToLowerInvariant())
in where子句
如果有人能帮我就太好了
Try
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())
我猜测 namespaceItem.Field("namespace_name")
返回null。
这是该方法的有效返回值吗?如果没有,则检查底层代码。
如果是一个有效的返回值,那么你需要在调用ToLowerInvariant():
之前检查是否为空: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")
};
注意额外的null检查:
namespaceItem.Field<string("namespace_name") ! = null &&
但是,这只是一个猜测:您需要确定空值来自哪里。
两种可能性:
- 没有字段
字段(namespace_name)
返回null,因为没有字段-
- 有一个字段,但是
字段(namespace_name) .ToLowerInvariant()。
返回null,因为namespace_name中的VALUE是null,所以ToLowerInvariant也返回null,这将吹掉包含