2010-03-08 44 views
0

我有一個查詢:LINQ查詢空引用異常

var bPermisos = from b in ruc.Permisos 
         where b.IdUsuario == cu.Id 
          select new Permisos(){ 
           Id=b.Id, 
           IdUsuario=b.Id, 
           IdPerfil=b.Id, 
           Estatus=b.Estatus 
          }; 
    var qSisPer = from perm in bPermisos 
         **select new {      
          perm.IdPerfil, 
          perm.Cat_Perfil.Nivel, 
          perm.Cat_Perfil.Nombre, 
          Nombre_Sistem=perm.Cat_Perfil.Cat_Sistema.Nombre** 
         }; 

,並拋出了我的異常,plz幫助!

+1

上請註明該拋出異常的行。 – Jay 2010-03-08 19:07:46

+0

是它有** – user289082 2010-03-08 19:18:10

回答

1

對於初學者來說,我覺得第一個查詢可以可能被改寫爲:

var bPermisos = ruc.Permisos.Where(b => b.IdUsuario == cu.Id); 

除此之外,這是相當不明確你的代碼做什麼。您似乎在重新投影您已有的結果 - 獲取已知類型的項目並創建一個匿名類型來保存它們。此外,第二個投影是訪問第一個查詢中未選中的一堆成員。

+0

是被重用,因爲Permisos是Cat_Perfil和Cat_Usuario的foreing鍵的表,和Cat_Perfil具有Cat_Sistema的外鍵,我想要做的就是展示這是查詢bPermisos內而是與IDS的Cat_Perfil的列,該IDS在這種情況下Cat_Sistema的名字,PLZ告訴我,如果我寫混亂。 thanx !! – user289082 2010-03-08 19:24:52

+0

好了,問題是,使用'select'語句時,你正在創建類型Permiso'的'一個新對象,並設置ID值。該對象沒有任何其他表中的數據或除您指定的屬性之外的任何屬性。您可以拉動與查詢的數據,和'select'的集合體(集合屬性),(或者根本就沒有使用'select'),或者你可以寫一個第二查詢*對其他表*,傳遞您從第一個查詢中獲得的ID。 – Jay 2010-03-08 19:53:28

+0

好吧,它現在帶來的數據,thanx!現在的問題是我看不到它,它不綁定到數據網格,是silverlight的情況,它可以在這裏被問到嗎? – user289082 2010-03-08 20:09:18

0

這可能是因爲以下任一來發生的事情:

  • cunull
  • 一個元件中的ruc.Permisosnull,在b.IdUsuario

導致異常,如果是後者,你可以通過增加處理這個問題:

var bPermisos = from b in ruc.Permisos 
       where b != null && b.IdUsuario == cu.Id 
       // ... rest of your code 
+0

這樣做,並沒有工作= S – user289082 2010-03-08 19:19:09