2011-05-16 83 views
0
var query = from t1 in Table1 
      join t2 in Table2 
       on new { t1.Id } 
       equals new { t2.Id} 
      select new 
      { 
       t1.Id, 
       t1.FirstName, 
       t1.MiddleName,//allows null values in the database 
       t1.LastName, 
       t1.phone //allows null values in the database 

      }; 
if(query.Count()>0)//fails here"The value for column MiddleName in table'Table1' is DBNULL" 
{ 
} 

有沒有一種方法,我可以在我的LINQ查詢中獲取包含middleName和Phone的空值的所有行?LINQ查詢失敗的NULL值

+0

「MiddleName」和「phone」的數據類型是什麼? – used2could 2011-05-16 15:01:11

+0

'Table1'和'Table2'是'DataTable'正確的,你沒有使用Linq to SQL? – R0MANARMY 2011-05-16 15:01:37

+0

你爲什麼加入T2?你永遠不會使用它,你是否已經過濾了這個集合? – Nix 2011-05-16 15:03:18

回答

0

聽起來像元數據與您的數據庫模式不同步。看起來好像何時爲您的模式生成類MiddleName不是可空的,但現在它是。如果是這樣的話,如果你使用實體框架,你需要刷新你的E​​DMX,或者如果你使用的是LINQ to SQL,那麼刷新你的類。

+0

我不認爲這是問題所在。 – Talk2me 2011-05-16 15:20:03

+0

好的,你沒有提供足夠的信息來幫助你,所以這是基於你遇到的問題的猜測。 LINQ是一種通用技術,您需要提供更多關於您正在使用的提供程序(實體框架?LINQ2SQL?純對象?)的詳細信息,並且發佈異常的完整堆棧跟蹤會對您有所幫助。 – 2011-05-16 15:23:48

+0

我正在使用Linq-SQL – Talk2me 2011-05-16 15:46:41

1

如果您使用的是linq-to-datasets,則必須手動將可空列轉換爲空值,因爲它們在DataRow中的值爲DBNull.Value。在強類型DataSet中,你應該能夠做一些事情,如:

var query = from t1 in Table1 
     join t2 in Table2 
      on new { t1.Id } 
      equals new { t2.Id} 
     select new 
     { 
      t1.Id, 
      t1.FirstName, 
      t1.IsMiddleNameNull ? null : t1.MiddleName, 
      t1.LastName, 
      t1.IsPhoneNull ? null : t1.Phone 
     }; 

非類型化的DataSet,你會打電話像t1.IsNull("MiddleName") ? null : t1["MiddleName"]

+0

這就是我得到的......錯誤\t 11:無效的匿名類型成員聲明。匿名類型成員必須聲明爲成員分配,簡單名稱或成員訪問權限。 – Talk2me 2011-05-16 15:30:48

+0

是的,這是匿名類型的問題。它不能從'null'推斷出類型。 – 2011-05-16 15:46:48

+0

如果您想使用匿名類型,則應將條件代碼包裝爲自定義屬性。將部分類添加到強類型DataRow中,並公開諸如MiddleNameNullable和PhoneNullable之類的屬性。 – 2011-05-16 21:29:54

0

能否請您給這個一杆

var query = from t1 in Table1 
      join t2 in Table2 
       on new { t1.Id } 
       equals new { t2.Id} 
      select new 
      { 
       Id = t1.Id, 
       FirstName = t1.FirstName, 
       MiddleName = t1.MiddleName,//allows null values in the database 
       LastName = t1.LastName, 
       Phone = t1.phone //allows null values in the database 

      }; 
if(query.Count()>0)//fails here"The value for column MiddleName in table'Table1' is DBNULL" 
{ 
} 
+0

這也行不通。 – Talk2me 2011-05-16 16:11:59

0

的問題是一個新的匿名對象的屬性可以根據這些值推斷出來的類型定義。

在這樣的線

MiddleName = t1.MiddleName,//allows null values in the database 

創建一箇中間名叫做新的屬性,其類型爲t1.MiddleName的類型。但是,如果t1.MiddleName爲空,什麼類型? Null沒有類型。

爲了防止任何ambiguousity乾脆把

MiddleName = (string)t1.MiddleName, 

讓編譯器知道,反正這是一個字符串,即使不提供。