读GUID值从数据库
问题描述:
请参阅代码:读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。 请参阅附上的调试画面。
答
干脆离开了一个新的Guid
-object的创建。相反的:
Guid g = new Guid();
Guid.TryParse(roleId.ToString(), out g);
只是这样做:
Guid g;
Guid.TryParse(roleId.ToString(), out g);
一定要在代表Guid
-object字符串传递。
答
你的问题是,从截图判断,var roleId
变量实际上是一个IEnumerable<string>
,而不是一个单一的字符串! 你需要做的是在你查询的结果调用.SingleOrDefault()
,那么你可以(试行)解析与Guid.TryParse
,即:
var roleId = (from r in _eStoreDbContext.UserModel
where r.UserName == userName select
r.RoleId).SingleOrDefault();
...
答
roleId
是IQueryable<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
谢谢!它正在工作。 – Jobi