2014-03-04 51 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