请参阅代码:
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。 请找到附带的调试屏幕。
答案 0 :(得分:4)
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 :(得分:3)
从屏幕截图来看,问题是var roleId
变量实际上是IEnumerable<string>
,而不是单个字符串!
您需要做的是在查询结果上调用.SingleOrDefault()
,然后您可以(尝试)使用Guid.TryParse
进行解析,即:
var roleId = (from r in _eStoreDbContext.UserModel
where r.UserName == userName select
r.RoleId).SingleOrDefault();
...
答案 2 :(得分:0)
简单地省略创建新的Guid
- 对象。而不是:
Guid g = new Guid();
Guid.TryParse(roleId.ToString(), out g);
这样做:
Guid g;
Guid.TryParse(roleId.ToString(), out g);
确保传入表示Guid
- 对象的字符串。