2011-10-22 86 views
1

聲明我嘗試執行此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") 
    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子句。

如果有人可以幫助我,這將是巨大的

+0

你可以用空字符串將null coalesce('a ?? b'表示'a',除非'a'爲空,然後'b')。 – katrielalex

回答

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

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

注意額外的空檢查:

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

然而,這只是一個猜測:你需要確定空值來自哪裏。

+0

沒關係,謝謝你的回覆 –

0

2可能性:

  • 沒有場

字段( 「namespace_name」)

回報空值,因爲沒有現場

  • 有一個字段,但是

字段(「namespace_name」)。ToLowerInvariant()。

返回null,因爲namespace_name中的VALUE爲null,所以ToLowerInvariant也返回null,這將吹響包含。