2014-03-04 74 views
2

請參閱代碼:讀GUID值從數據庫

var roleId = from r in _eStoreDbContext.UserModel where r.UserName == userName select r.RoleId; 
if(string.IsNullOrEmpty(roleId.ToString())) 
{ 
    return false; 
} 

Guid g = new Guid(); 
Guid.TryParse(roleId.ToString(), out g); 

在執行查詢我得到的GUID值,但它轉換成GUID,越來越000XXXX。 請參閱附上的調試畫面。

enter image description here

回答

0

乾脆離開了一個新的Guid -object的創建。相反的:

Guid g = new Guid(); 
    Guid.TryParse(roleId.ToString(), out g); 

只是這樣做:

Guid g; 
    Guid.TryParse(roleId.ToString(), out g); 

一定要在代表Guid -object字符串傳遞。

3

你的問題是,從截圖判斷,var roleId變量實際上是一個IEnumerable<string>,而不是一個單一的字符串! 你需要做的是在你查詢的結果調用.SingleOrDefault(),那麼你可以(試行)解析與Guid.TryParse,即:

var roleId = (from r in _eStoreDbContext.UserModel 
       where r.UserName == userName select 
       r.RoleId).SingleOrDefault(); 

...

+0

謝謝!它正在工作。 – Jobi

4

roleIdIQueryable<T>(這僅僅是查詢定義,不是查詢執行的結果,絕對不是結果中的第一項)。當你打電話給roleId.ToString()時,你會得到類型名稱,這顯然不能被解析爲Guid。

我認爲你需要從數據庫中第一或默認roleId得到:

var roleId = _eStoreDbContext.UserModel 
       .Where(u => u.UserName == userName) 
       .Select(u => u.RoleId) 
       .FirstOrDefault(); 

進一步行動取決於什麼類型RoleId了。如果它是可空的Guid,那麼你可以比較roleId與null來檢查id是否被找到。如果它不可爲空,則將結果與Guid.Empty進行比較。

+1

謝謝!它正在工作。 – Jobi