Linq 请求中的Where 语句

发布于 2024-12-11 11:14:14 字数 1057 浏览 0 评论 0原文

我尝试执行此 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())
在 where 子句中。

如果有人能帮助我那就太好了

I try to execute this Linq request :

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") 
    };

But when i execute it, Visual Studio Throw a NullReferenceException because of this line :

namespaceItem.Field("namespace_name").ToLowerInvariant().Contains(namespaceName.ToLowerInvariant())
in where clause.

If anyone can help me it would be great

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

等数载,海棠开 2024-12-18 11:14:14

尝试

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())                                     

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())                                     
似最初 2024-12-18 11:14:14

我猜想 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") 
    };

请注意额外的 null 检查:

      namespaceItem.Field<string("namespace_name") ! =  null &&

但是,这只是一个猜测:您需要确定 null 值在哪里是来自。

I would guess that namespaceItem.Field("namespace_name") is returning null.

Is this a valid return value for that method? If not, then check your underlying code.

If this is a valid return value then you need to check for a null before calling 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") 
    };

Note the extra null check:

      namespaceItem.Field<string("namespace_name") ! =  null &&

However, this is only a guess: you need to determine where the null value is coming from.

倾`听者〃 2024-12-18 11:14:14

2种可能性:

  • 没有字段

字段(“命名空间名称”)

返回 null,因为没有字段 -

  • 有一个字段,但

Field("namespace_name").ToLowerInvariant()。

返回 null,因为 namespace_name 中的 VALUE 为 null,因此 ToLowerInvariant 也会返回 null,这会破坏包含。

2 possibilities:

  • There is no field

Field("namespace_name")

returns null because there is no field-

  • There isa field, but

Field("namespace_name").ToLowerInvariant().

returns null because the VALUE in namespace_name is a null so ToLowerInvariant also returns null, which will blow the contains.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文