从数据库中读取GUID值

时间:2014-03-04 11:05:36

标签: c# linq entity-framework

请参阅代码:

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

3 个答案:

答案 0 :(得分: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 :(得分: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 - 对象的字符串。