2009-10-21 184 views
4

我想檢索登錄用戶的角色列表。如何處理NHibernate LINQ空結果集?

以下是從數據庫中讀取用戶角色的代碼段。

ISession session = NHibernateHelper.GetCurrentSession(); 
      var data = from s in session.Linq<ApplicationUserRole>() 
        where s.AppUser.ID = 1 
        select s.Role.Name; 

      List<Role> list = data.ToList(); 

AppUser:用戶實體 角色:角色實體。 由於數據庫中沒有用於用戶標識1的數據,它不會返回任何內容。

返回類型數據是NHibernate.Linq.Query,它不爲空。

當我嘗試將其轉換爲ToList()時,會引發以下錯誤:

「索引超出範圍必須是 比 大小非負少的採集參數名:首頁」

如何處理空的結果集?

+1

+1:這些類型的煩惱讓我在LINQ到NHibernate的失去信心。 – 2010-02-01 20:59:26

回答

1

這應該工作...

List<Role> list = data.Any() ? data.ToList() : new List<Role>(); 
+0

不,它只是在Any()上爆炸,並且有完全相同的錯誤信息。從我所看到的,我認爲這是NHibernate Linq告訴你「我無法處理你的表情」的方式。 – 2010-07-31 01:23:33