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
C# Linq请求中的Where语句_C#_Linq - Fatal编程技术网

C# Linq请求中的Where语句

C# Linq请求中的Where语句,c#,linq,C#,Linq,我尝试执行此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")

我尝试执行此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.Fieldnamespace_name.ToLowerInvariant.ContainesNamespaceName.ToLowerInvariant 在where子句中

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

试试看

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.Fieldnamespace\u 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种可能性:

没有磁场 字段名称空间名称

返回null,因为没有字段-

有一个领域,但是 Fieldnamespace_name.ToLowerInvariant

返回null,因为名称空间\u name中的值为null,所以ToLowerInvariant也返回null,这将破坏包含。

可以使用null合并a??b表示a,除非a为null,然后使用空字符串合并b。